Что-то похожее на ваш пример объекта JSON
, это Array.prototype
методы.
Они были реализованы многими поставщиками браузеров много времени до ES5, например Mozilla , начал реализовывать их для своей версии JavaScript (tm) 1.6, по состоянию на сентябрь 2005 года.
Другие различия между пробелами ES3-ES5, не описанные до ES5, следующие:
- Не бросать на
for (var prop in null)
или undefined
, в ES3 должно произойти TypeError
Не бросать на FunctionDeclarations
внутри блоков, например:
{ function foo () {} }
FunctionDeclarations
разрешены на уровне Program
(глобальный код вне чего-либо) или в пределах FunctionBody
функции. Блоки могут содержать только операторы.
Строки с LineContinuations, например:
var s = 'foo \
bar'; // 'foo bar'
Существуют и другие интересные вещи, такие как не совсем восьмеричные числа Например:
var n = 08;
Выше NumericLiteral
является недействительным в любой версии стандарта ECMAScript.
DecimalLiteral
синтаксис не позволяет литералу начинаться с 0
(за исключением курса 0
литерала), а грамматика OctalIntegerLiterals
указывается для взятия нуля, а затем числа изОт 0 до 7 (только 0[0-7]+
), поэтому литералы 08
или 09
, должны производить SyntaxError
Но этого не происходит ни в одной реализации, которую я ''проверенные когда-либо, они обрабатываются так же, как DecimalLiteral, (08
производит 8
).
Firefox - единственная реализация, которая покажет вам предупреждение:
Редактировать: Еще одна широко распространенная нестандартная функция, существующая в настоящее время: Callable RegExps .
Это умениеЭто было введено Mozilla некоторое время назад, позже клонировано АО «WebKit», V8 и движком Opera JS.
В принципе вам разрешено вызывать объекты RegExp, как если бы они были функциями, просто являясь синтаксическим сахар псевдоним для RegExp.prototype.exec
метода:
var re = /foo/;
re('foobar'); // ["foo"], just an alias for:
re.exec('foobar'); // ["foo"]
Эта функция полностью нестандартна, поскольку ES3 и ES5 не позволяют определять [[Call]]
в RegExp
экземплярах, поскольку их внутренниеметоды и семантика полностью определены.
Поскольку в этих реализациях объекты RegExp
реализуют внутренний метод [[Call]]
, они распознаются как функции оператором typeof
:
typeof /foo/; // "function" in some implementations