1. Foren
  2. Kommentare
  3. Software-Entwicklung
  4. Alle Kommentare zum Artikel
  5. › Microsoft-Typescript…

Standardkonformes JS?

  1. Thema

Neues Thema Ansicht wechseln


  1. Standardkonformes JS?

    Autor: developer 02.10.12 - 10:36

    Also inkompatibel zum Internet Explorer? <duck>

  2. Re: Standardkonformes JS?

    Autor: 4x 02.10.12 - 10:42

    Was für JS ist inkompatibel zum IE? Codebeispiele?

  3. Re: Standardkonformes JS?

    Autor: developer 02.10.12 - 11:03

    Internet Explorer 9:

    if( undefined === HTMLDocument ){
    alert('wtf');
    }



    1 mal bearbeitet, zuletzt am 02.10.12 11:04 durch developer.

  4. Re: Standardkonformes JS?

    Autor: IScream 02.10.12 - 11:46

    developer schrieb:
    --------------------------------------------------------------------------------
    > Internet Explorer 9:
    >
    > if( undefined === HTMLDocument ){
    > alert('wtf');
    > }


    var str = "asd";
    var char = str[0]; //str.charAt(0)

    ;-)

  5. Re: Standardkonformes JS?

    Autor: droptable 02.10.12 - 11:50

    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.

  6. Re: Standardkonformes JS?

    Autor: developer 02.10.12 - 13:26

    > 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.

  7. Re: Standardkonformes JS?

    Autor: IScream 02.10.12 - 13:53

    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")

  8. Re: Standardkonformes JS?

    Autor: developer 02.10.12 - 14:01

    > 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.

  9. Re: Standardkonformes JS?

    Autor: droptable 02.10.12 - 14:07

    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.

  10. Re: Standardkonformes JS?

    Autor: developer 02.10.12 - 15:11

    > 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.

  11. Re: Standardkonformes JS?

    Autor: redmord 02.10.12 - 15:41

    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'; }

  12. Re: Standardkonformes JS?

    Autor: droptable 02.10.12 - 16:18

    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.

  13. Re: Standardkonformes JS?

    Autor: scheißregistration 02.10.12 - 16:19

    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".

  14. Re: Standardkonformes JS?

    Autor: redmord 02.10.12 - 17:11

    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.

  15. Re: Standardkonformes JS?

    Autor: droptable 02.10.12 - 18:00

    Dem kann ich mich nur anschließen.



    1 mal bearbeitet, zuletzt am 02.10.12 18:01 durch droptable.

  16. Re: Standardkonformes JS?

    Autor: Paykz0r 02.10.12 - 23:47

    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.

  1. Thema

Neues Thema Ansicht wechseln


Um zu kommentieren, loggen Sie sich bitte ein oder registrieren Sie sich. Sie müssen ausserdem in Ihrem Account-Profil unter Forum einen Nutzernamen vergeben haben. Zum Login

Stellenmarkt
  1. ING Deutschland, Frankfurt
  2. Statistisches Bundesamt, Wiesbaden
  3. BEHG HOLDING AG, Berlin
  4. Conditorei Coppenrath & Wiese KG, Mettingen

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Spiele-Angebote
  1. 31€
  2. 17,99€
  3. 27,99€


Haben wir etwas übersehen?

E-Mail an news@golem.de