CSS-Problem IE11: "SCRIPT1004: ';' erwartet"

  • Ich stehe mal wieder auf dem Schlauch, dabei lief der Tag eigentlich gut, aber sowas versaut mir dann wirklich alles ;(

    Code:

    Diese Funktion läuft in allen Browsern, nur nicht im IE11. Das "if(typeof Object.values !== 'function')" ist Absicht, denn der IE11 kennt "Object.values" nicht und soll daher die Bedingung nutzen und nicht die darunter. Soweit so gut. Dennoch meldet mit der IE11 einen Fehler bei "for (var value of...". Genau hier steckt das Problem. Dieses "for ... of" kann er nicht, daher soll er ja das darüber nutzen.

    Ich bekomme aber immer den Fehler "SCRIPT1004: ';' erwartet" und zwar genau an dem "for (var". Klar, verstehe ich, der IE erwartet da ein Semikolon, aber er soll da doch gar nicht hin, sondern den IF-Bereich darüber nutzen!

    Noch seltsamer wird es, wenn ich den kompletten ELSE-Bereich lösche, dann kommt als Fehler: "')' erwartet".

    Hat einer eine Idee? <3

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • hast du versucht, mit

    console.log(Object.values)

    das fragliche objekt manuell zu pruefen? Vielleicht solltest du es auf

    Code
    if (typeof Object.values !== 'undefined') {  
     //...
    }

    pruefen.

    Profitip:

    vor der problematischen stelle einfach

    Code
    debugger;

    einfuegen, und firebug/debugging tools des browsers stoppen an der stelle und zeigen dir die verfuegbaren variablen, damit du weisst womit du an der stelle arbeiten kannst. Dazu mit F12 firebug oeffnen und das fragliche script neu laden oder triggern.

  • Also erst mal, Profitipp ist gut gesagt. Werde ich dann gleich mal ausprobieren müssen. Habe ehrlich gesagt von "debugger;" noch nichts gehört oder gelesen.

    Das mit "function" und "undefined" spielt hier keine Rolle, denn der Bereich soll ja ausgeführt werden, wenn es NICHT da ist. Wenn es "undefined" wäre, dann wäre es ja keine "function" und somit auch erfüllt.

    Console.log machte ich öfter, brachte aber nicht wirklich viel. Die Meldung, die kam, war ja unter anderem daraus. In dem Fall mit dem Log von Dir oben kommt nur "Object.values is not a function". Genau. Und darauf prüfe ich ja ;)

    Das Ganze ist nun aber gelöst bzw. ich weiß nun auch was der von mir wollte. War wohl auch mein Denkfehler.

    Ich wollte im Grunde nur: "wenn Du A nicht kannst, dann nimm B" oder eben in dem Fall oben andersherum. Also als Entscheidung, nimm native Funktionen oder eben eigene. In PHP geht das ja problemlos, solange kein Syntaxfehler da ist. Hier war mein Denkfehler!

    Der JS-Compiler führt immer alles aus, egal ob er es kann oder nicht. Erst in der eigentlichen Anwendung wird entschieden, was ausgeführt wird und was nicht.

    Wie gesagt, dieses "Object.values" kennt der IE11 nicht. Der kennt nur "Object.keys". Ebenso kennt er das "for ... of" nicht. Daher die beiden if/else, die im Inneren im Grunde das gleiche tun. Und eben genau dieses "for ... of" im Else wirft dann den Fehler, weil er es als Syntaxfehler ansieht.

    Und mit gelöschtem Else wurde dann auch klar. Weiter unten im Code steht "lazyImages.forEach(img => lazyObserver.observe(img));". Die Schreibweise kennt der IE11 auch nicht und dadurch wurde dann viel weiter hinten im Script der Fehler "')' erwartet" ausgelöst.

    Lösung war dann letztendlich, das "lazyImages.forEach(img => lazyObserver.observe(img));" umzuschreiben, damit der IE11 es auch kapiert und dann eben im Else das "for ... of" durch eine normale Schleife zu ersetzen.

    Dann akzeptierte der IE11 die Syntax und es lief. Und ja, der IE11 führt das IF aus, alle anderen modernen Browser das ELSE.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(