Что такое кросс-браузерная поддержка новых функций JavaScript 1.7? В частности, массивы и операторы let
https://developer.mozilla.org/en/New_in_JavaScript_1.7
Многие из этих новых функций заимствованы из Python и позволят создавать менее подробные приложения, что всегда хорошо. Сколько раз вы печатали
for (i = 0; i < arr.length; i++) {
/* ... */
}
для действительно простых операций? Разве это не будет проще:
[/* ... */ for each (i in arr)]
Я думаю, что краткость это отличная вещь. По сути, в конечном итоге все сводится к IE.
IE поддерживает эти новые функции? А как насчет других браузеров?
3 ответа
Нет, когда они говорят "JavaScript", они имеют в виду буквально: движок ECMAScript, используемый Gecko. JScript и другие движки (AFAIK) не поддерживают эти функции.
РЕДАКТИРОВАТЬ: Согласно википедии, JavaScript 1.7 реализует ECMAScript "Edition 3", плюс все улучшения JavaScript 1.6, плюс генераторы Pythonic и понимания массива ([a*a for (a in iter)]), блокирует область действия с помощью let, разрушая назначение (var [a, Ь]=[1,2])". Таким образом, эти функции не являются частью ECMAScript.
Хотя этот вопрос немного устарел и помечен как "отвеченный", я нашел его в Google, и приведенные ответы могут быть неточными или, если нет, определенно неполными.
Очень важно отметить, что Javascript НЕ СТАНДАРТ. Кен правильно упомянул, что ECMAScript - это кросс-браузерный стандарт, которому стремятся соответствовать все браузеры, но он не пояснил, что Javascript НЕ ECMAScript.
Сказать, что Javascript "внедряет" ECMAScript, означает, что Javascript включает в себя ECMAScript, а также собственные проприетарные дополнительные функции, не связанные с браузером. for each
Пример, приведенный Николасом, является примером проприетарной функции, добавленной Mozilla, которая отсутствует в каком-либо стандарте и поэтому вряд ли будет принята другими браузерами.
Функции Javascript 1.7 и 1.8 полезны для разработки расширений в XUL, но никогда не должны использоваться для кросс-браузерной разработки - вот для чего нужны стандарты.
В дополнение к тому, что IE не поддерживает его, похоже, что браузеры на основе webkit (Safari, Chrome), несмотря на утверждение о поддержке JS 1.7 (фактически выполняющие теги сценария, объявленные как в JS 1.7), фактически не поддерживают ни одну из этих функций, которые означает, что на данный момент JS 1.7 с его очень хорошими функциями ограничен только браузерами Geko.
И поскольку Webkit по-прежнему выполняет сценарии, помеченные только как 1.7, это также означает, что мы не можем даже изящно завершить работу с ошибками, а просто создадим синтаксические ошибки в этих браузерах, когда будем использовать любое из новых ключевых слов или синтаксиса.