Also inkompatibel zum Internet Explorer? <duck>
Benutzer wird von Ihnen ignoriert. Anzeigen
Was für JS ist inkompatibel zum IE? Codebeispiele?
Benutzer wird von Ihnen ignoriert. Anzeigen
Internet Explorer 9:
if( undefined === HTMLDocument ){
alert('wtf');
}
1 mal bearbeitet, zuletzt am 02.10.12 11:04 durch developer.
Benutzer wird von Ihnen ignoriert. Anzeigen
developer schrieb:
--------------------------------------------------------------------------------
> Internet Explorer 9:
>
> if( undefined === HTMLDocument ){
> alert('wtf');
> }
var str = "asd";
var char = str[0]; //str.charAt(0)
;-)
Benutzer wird von Ihnen ignoriert. Anzeigen
HTMLDocument is nicht mehr.
DOM4 definiert nur noch Document.
http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html
MS hat im IE9 quasi nur aufgeräumt.
Benutzer wird von Ihnen ignoriert. Anzeigen
> HTMLDocument is nicht mehr.
wenn du prüfst ob HTMLDocument undefined ist wirft der ie9 eine exception.
Du kannst nicht prüfen ob HTMLDocument undefined ist, weil HTMLDocument undefined ist.
Gut man kann die Exception fangen oder auf window['HTMLDocument'] prüfen, aber eine Exception etwas wäre undefined weil man prüft ob es undefined ist... Na ja.
1 mal bearbeitet, zuletzt am 02.10.12 13:28 durch developer.
Benutzer wird von Ihnen ignoriert. Anzeigen
developer schrieb:
--------------------------------------------------------------------------------
> > HTMLDocument is nicht mehr.
>
> wenn du prüfst ob HTMLDocument undefined ist wirft der ie9 eine exception.
>
> Du kannst nicht prüfen ob HTMLDocument undefined ist, weil HTMLDocument
> undefined ist.
>
> Gut man kann die Exception fangen oder auf window['HTMLDocument'] prüfen,
> aber eine Exception etwas wäre undefined weil man prüft ob es undefined
> ist... Na ja.
deswegen macht man sowas in der regel so:
if (typeof(HTMLDocument) === "undefined")
Benutzer wird von Ihnen ignoriert. Anzeigen
> deswegen macht man sowas in der regel so:
> if (typeof(HTMLDocument) === "undefined")
Dass es "Workarounds" gibt hab ich selbst erwähnt.
Das macht das Verhalten in dem Fall trotzdem nicht besser.
Benutzer wird von Ihnen ignoriert. Anzeigen
Das ist kein Workaround.
Jede Variable, welche nicht deklariert ist aber lesend angesprochen wird, wirft eine Exception.
Daher nutzt man entweder `typeof` oder man spricht das Objekt in seinem Eltern-Kontext an um dessen Getter zu nutzen, welcher dir dann auch dein gewünschtes `undefined` zurück liefert.
if (window.HTMLDocument === undefined) {
...
}
if (typeof HTMLDocument === "undefined") {
...
}
2 mal bearbeitet, zuletzt am 02.10.12 14:15 durch droptable.
Benutzer wird von Ihnen ignoriert. Anzeigen
> Das ist kein Workaround.
Ok stimmt. Mein Fehler.
Mir fällt gerade auf, dass ich undefined nur einem kontext habe, und zwar bei nicht verwendeten aber vorhandenen parametern in Funktionsaufrufen, und da gibt es die Variable ja dann.
Wieder was gelernt.
Benutzer wird von Ihnen ignoriert. Anzeigen
undefined funktioniert auch dann, wenn die variable später erst deklariert resp. gefüllt wird.
wirft exception:
if(foo == undefined) { .... }
wirft keine exception:
if(foo == undefined) { var foo = 'bar'; }
Das hängt damit zusammen, dass der JIT-Compiler die deklaration von variablen immer zum Anfang des Namespaces verschiebt.
Für den Compiler wird daraus also:
var foo;
if(foo == undefined) { foo = 'bar'; }
Benutzer wird von Ihnen ignoriert. Anzeigen
Ein ähnliches Verhalten trifft auf Funktions-Deklarationen zu (nicht Ausdrücke). So kann man Funktionen schon aufrufen/abfragen bevor diese im Verlauf Deklariert wurden - aber nur wenn der Compiler zuvor in der Lage war im selben Code-Block die Deklaration zu verarbeiten.
foo(); // Funktioniert
function foo() {} // Zur Übersetzungszeit definierte Funktion
if (...) {
bar(); // Exception
function bar() {} // Zur Laufzeit definierte Funktion
}
Manche Dinge sind schon irgendwie komisch gelöst.
1 mal bearbeitet, zuletzt am 02.10.12 16:25 durch droptable.
Benutzer wird von Ihnen ignoriert. Anzeigen
redmord schrieb:
--------------------------------------------------------------------------------
> undefined funktioniert auch dann, wenn die variable später erst deklariert
> resp. gefüllt wird.
>
> wirft exception:
>
> if(foo == undefined) { .... }
>
> wirft keine exception:
>
> if(foo == undefined) { var foo = 'bar'; }
>
> Das hängt damit zusammen, dass der JIT-Compiler die deklaration von
> variablen immer zum Anfang des Namespaces verschiebt.
>
> Für den Compiler wird daraus also:
>
> var foo;
> if(foo == undefined) { foo = 'bar'; }
Für die Leute die danach suchen möchten: nennt sich "variable hoisting".
Benutzer wird von Ihnen ignoriert. Anzeigen
Man darf nicht vergessen: Für den Erstentwurf hatte Brendan Eich nur zwei Wochen Zeit. ^^
Richtiges Namespacing á la PHP 5.3 würde ich dem Scoping jedoch vorziehen.
(function($, undefined) { ... })(jQuery)
Ist für Einsteiger schon ziemlich unverständlich, obwohl es recht elegant einige hausgemachten Probleme erschlägt.
Auch, dass irgendwie alles mehr oder weniger eine Funktion ist, nervt auch.
Ich finde den Ansatz von TypeScript grundsätzlich gut. Denn komplexe Objektstrukturen mit Vererbung etc. war für mich bisher ein Graus. CoffeScript war für mich aufgrund der extrem vereinfachten Syntax bisher keine Option.
Benutzer wird von Ihnen ignoriert. Anzeigen
Dem kann ich mich nur anschließen.
1 mal bearbeitet, zuletzt am 02.10.12 18:01 durch droptable.
Benutzer wird von Ihnen ignoriert. Anzeigen
developer schrieb:
--------------------------------------------------------------------------------
> Internet Explorer 9:
>
> if( undefined === HTMLDocument ){
> alert('wtf');
> }
Das Beispiel hinkt, weil DOM nicht zu verwechseln mit Javascript ist.
Wenn man bsw. Rhino oder NodeJS im Backend einsetzt, gibt es auch kein DOM.
Und wie andere schon erwähnen,
in top oder window schauen.
Das ist ein Array. Und arrays geben ein undefined zurück wenn ein Eintrag nicht existiert.
JS hat ein viel schlechteren ruf als nötig ist.
Finde ich sehr schade.
Es hat leider schwächen,
aber die stärken überwiegen.
Benutzer wird von Ihnen ignoriert. Anzeigen
Kommentare: 732 | letzter Beitrag 22:30 Uhr
Kommentare: 568 | letzter Beitrag 14:41 Uhr
Kommentare: 251 | letzter Beitrag 17:14 Uhr
Kommentare: 185 | letzter Beitrag 22:31 Uhr
Kommentare: 170 | letzter Beitrag 08:02 Uhr
E-Mail an news@golem.de

Steve Wilhite, früherer Mitarbeiter von Compuserve, hat einen Webby Award für die Entwicklung des Grafikformates Gif erhalten. Aus diesem Anlass hat der Erfinder noch einmal auf der korrekten Aussprache beharrt.

Echte Computerviren gibt es in Industrieländern kaum noch. Wer umgangssprachlich von Viren spricht, meint Trojaner, Adware oder Würmer. Doch Microsoft sieht sie vor dem Comeback - in Regionen mit schlechter Internet- und Patch-Versorgung.

Google hat die Android-Apps Drive und Chrome aktualisiert. Die Google-Drive-App im aktualisierten Erscheinungsbild bringt eine Bildvorschau, eine Scanfunktion und eine Downloadmöglichkeit. Chrome bringt einen Vollbildmodus und eine Verlaufsfunktion innerhalb eines Browsertabs.

Eine offene Spielumgebung, sehr schnelle Autos und spannende Verfolgungsjagden kündigt EA für Need for Speed Rivals an. Das Rennspiel auf Basis der Frostbite-3-Engine erscheint auch für die Next-Gen-Konsole.

Eine Preissenkung bei den Software-Lizenzen hilft Windows 8-Geräten. Ihr Anteil soll auf 10 bis 20 Millionen steigen.

Der Chaos Computer Club hat das Grundgesetz als Open Data veröffentlicht. Die dafür eingerichtete Plattform steht auch anderen Nutzern offen, die weitere Dokumente aus der Verwaltung dort veröffentlichen sollen.