2015-03-22 4 views
7

Ich verstehe nicht den besten Weg, „lassen“ Schlüsselwort verwenden ...Kann "let" Schlüsselwort in Safari Javascript nicht verwenden?

  • In IE11 und Chrome45 kann ich es verwende feine
  • In Safari8.0.4, wie in älteren Versionen von Chrome, es gibt den Fehler "unerwartete Verwendung des reservierten Wortes 'lass'"
  • In Firefox funktioniert das Schlüsselwort letto nur innerhalb <script type="application/javascript;version=1.7"/>, aber dieser Skripttyp wird nicht einmal als Javascript in IE11, Chrome45, Safari8 erkannt.

Hier ist ein JSFiddle, die es in Aktion zeigt: https://jsfiddle.net/p6cgtyg6/1/

Also - ich nichts dagegen haben, dass Benutzer modernen Versionen ihrer Browser zu verwenden.

Und es macht mir nichts aus Safari auszuschließen, wenn es ehrlich gesagt keine Safari-Version gibt, die dieses Schlüsselwort unterstützt. (Ist das wirklich wahr? Warum verbringt jeder seine ganze Zeit damit, sich über Internet Explorer Gedanken zu machen, wenn Safari in ES6-Begriffen so viel schlechter aussieht? Habe ich etwas verpasst?).

Aber wie soll ich erlauben "lassen" in Firefox arbeiten, während Chrome/IE nicht verhindert? (Ich habe noch keine Links von Leuten gefunden, die sich darüber aufregen, wie sich das Firefox-Skript anders verhält als Chrome, und ich hätte mehr Beschwerden erwartet, also denke ich, dass ich etwas Offensichtliches verpasst haben muss ...)

+1

Warum ist der Mangel an Unterstützung für * let * ein Problem? ECMA-262 6. Edition ist immer noch nur ein Entwurf, viele seiner Funktionen werden nicht von allen Browsern unterstützt. Es gibt einige ES5-Funktionen, die noch nicht unterstützt werden. – RobG

+1

"für (var i = 0; i ") .text (c [i] .title) .click (funktion() {DoStuff (c [i]); }). appendTo (p); } "- dieser Code wird sich falsch verhalten. Der einfachste und sauberste Codefix ist die Verwendung von "let" innerhalb der for-Schleife. Ich will nicht wirklich yuckier Code jetzt schreiben, wenn ES6 kurz vor der Ecke ist und meistens unterstützt wird, wird Anzeige das Problem schön lösen ... –

+0

@LucianWischik keine Notwendigkeit für 'ließ' in diesem Fall, obwohl. viele einfachere Möglichkeiten, anstatt eine Abhängigkeit von einem 6 => 5 Compiler hinzuzufügen. –

Antwort

4

In Bezug auf Safari 8 ist es nur not supported; Für diesen Browser würde ich empfehlen, Babel zu verwenden.

Wenn Sie das Gefühl haben, dass this bug nicht in kürzester Zeit repariert werden, dann könnten Sie ein Skript haben, das Firefox erkennt, das dann Ihr Skript mit dem entsprechenden Wert für das Attribut type eingibt.

Als eine Randnotiz, würde ich raten, keine Blöcke zu verwenden-es sei denn, Sie möchten this transpiler -nor lassen Ausdrücke, die will be dropped.

1

Siehe Browserkompatibilität dieses ES6-Schlüsselworts.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Browser_compatibility

Auch see this SO post für ES6 Feature-Erkennung.

+0

Danke. Das bestätigt, dass Safari8 keinerlei "Let" -Support hat. Ich wundere mich über den zweiten Teil meiner Frage - Was ist der richtige Weg, um "Let" auf einer Seite zu verwenden, die sowohl in Firefox als auch in Chrome funktioniert? Ihr ES6-Feature-Detection-Post war interessant, hat diesen Aspekt jedoch nicht berührt. –

+0

Ohne einen Server, der die Scripts Tags erzeugt, kann ich nicht sehen, wie es in allen Browsern gut funktioniert - in Chrome funktioniert es mit einem Script Tag wie 'script type =" application/javascript "version =" 1.7 "' und sogar ohne Version, aber in Firefox braucht es 'script type =" application/javascript; version = 1.7 "' – click2install

4

let ist ein Teil der ECMAScript 6-Spezifikation und ECMAScript 6 selbst befindet sich im Entwurfsstatus. Selbst in seiner unvollständigen Form werden seine Funktionen nicht vollständig von tatsächlichen Browserversionen unterstützt.

Da Sie heute in ES6 tauchen wollen für die Produktion, die beste Wahl ist ES6 bis ES5 Transpiler zu verwenden, die meisten Prominenten sind Babel und Traceur, die sowohl als CLI und Pakete für das Build-System Ihrer Wahl verfügbar sind. Es gibt Online-Tools für Babel und Traceur, um sie auszuprobieren. Und Scratch JS Erweiterung für Chrome verwendet sowohl Babel und Traceur und eignet sich hervorragend für die Entwicklung und Kompilierung von ES6-Skripten, wenn das Build-System keine Option ist.

Hier ist up-to-date comparison table, die ES6-Feature-Unterstützung in Browsern und ES6-Compilern umfasst.

Und hier ist a great collection der ES6-Tools.