Gibt es eine Chance für eine Änderung dieses Verhaltens in zukünftigen ECMAScript-Versionen?
Ich würde sagen, die Chancen sind sehr gering. Und es gibt mehrere Gründe:
Wir wissen bereits, wie ES5 und ES6 aussehen
Die zukünftigen ES-Versionen sind bereits fertig oder im Entwurf. Keiner, afaik, ändert dieses Verhalten. Beachten Sie dabei, dass es Jahre dauern wird, bis diese Standards in Browsern in dem Sinne etabliert sind, dass Sie Anwendungen mit diesen Standards schreiben können, ohne sich auf Proxy-Tools verlassen zu müssen, die sie zu tatsächlichem Javascript kompilieren.
Versuchen Sie einfach, die Dauer zu schätzen. Nicht einmal ES5 wird von den meisten Browsern vollständig unterstützt, und es wird wahrscheinlich noch einige Jahre dauern. ES6 ist noch nicht einmal vollständig spezifiziert. Aus heiterem Himmel schauen wir uns noch mindestens fünf Jahre an.
Browser machen ihre eigenen Sachen
Es ist bekannt, dass Browser zu bestimmten Themen ihre eigenen Entscheidungen treffen. Sie wissen nicht, ob alle Browser diese Funktion auf genau dieselbe Weise vollständig unterstützen. Natürlich würden Sie wissen, sobald es Teil des Standards ist, aber selbst wenn es angekündigt wurde, Teil von ES7 zu werden, wäre es ab sofort bestenfalls Spekulation.
Und Browser können hier ihre eigene Entscheidung treffen, insbesondere weil:
Diese Änderung bricht
Eines der größten Dinge an Standards ist, dass sie normalerweise versuchen, abwärtskompatibel zu sein. Dies gilt insbesondere für das Web, in dem derselbe Code für alle Arten von Umgebungen ausgeführt werden muss.
Wenn der Standard eine neue Funktion einführt und diese in alten Browsern nicht unterstützt wird, ist das eine Sache. Bitten Sie Ihren Kunden, seinen Browser für die Nutzung der Website zu aktualisieren. Aber wenn Sie Ihren Browser aktualisieren und plötzlich die Hälfte des Internets für Sie kaputt geht, ist das ein Fehler, ähm-nein.
Sicher, diese spezielle Änderung wird wahrscheinlich nicht viele Skripte beschädigen. Aber das ist normalerweise ein schlechtes Argument, weil ein Standard universell ist und jede Chance berücksichtigen muss. Überlegen Sie einfach
"use strict";
als Anweisung, in den strengen Modus zu wechseln. Es zeigt, wie viel Aufwand ein Standard in den Versuch steckt, alles kompatibel zu machen, weil sie den strengen Modus zum Standard (und sogar nur zum Modus) hätten machen können. Mit dieser cleveren Anweisung können Sie jedoch zulassen, dass alter Code unverändert ausgeführt wird, und trotzdem den neuen, strengeren Modus nutzen.
Ein weiteres Beispiel für die Abwärtskompatibilität: der ===
Operator. ==
ist grundlegend fehlerhaft (obwohl einige Leute anderer Meinung sind) und es hätte einfach seine Bedeutung ändern können. Stattdessen ===
wurde eingeführt, so dass alter Code weiterhin ausgeführt werden kann, ohne zu brechen. Gleichzeitig können neue Programme mit einer strengeren Prüfung geschrieben werden.
Und damit ein Standard die Kompatibilität bricht, muss es einen sehr guten Grund geben. Was uns dazu bringt
Es gibt einfach keinen guten Grund
Ja, es nervt dich. Das ist verständlich. Aber letztlich ist es nichts , das nicht gelöst werden kann , sehr leicht . Verwenden Sie ||
, schreiben Sie eine Funktion - was auch immer. Sie können es fast kostenlos zum Laufen bringen. Was ist also wirklich der Vorteil, wenn Sie all die Zeit und Mühe in die Analyse dieser Veränderung investieren, von der wir wissen, dass sie ohnehin bricht? Ich verstehe den Punkt einfach nicht.
Javascript hat mehrere Schwachstellen in seinem Design. Und es ist zunehmend ein größeres Problem geworden, da die Sprache immer wichtiger und mächtiger wurde. Obwohl es sehr gute Gründe gibt, viele seiner Designs zu ändern, sind andere Dinge nicht dazu gedacht, geändert zu werden .
Haftungsausschluss: Diese Antwort basiert teilweise auf Meinungen.
R
Hintergrund und dort bekommen Sie, was Sie gesagt habenpaste0("a", NULL) == "a"