имя атрибута "var" в ассоциативном массиве JavaScript - PullRequest
5 голосов
/ 13 июня 2011

Быстрый вопрос из любопытства:

код ниже работает в Firefox и Chrome, но не в Safari. Это спецификация Javascript, обойденная Firefox и Chrome, или это странная вещь в Safari?

 var a = {};
 a.var = "test";

всего (Firefox, Safari и Chrome)

 a["var"] = "test";
 a.id = "another test";

работает как положено.

Cheers, Йерун.

Ответы [ 3 ]

5 голосов
/ 13 июня 2011

var - зарезервированное ключевое слово, поэтому оно может сломаться при использовании без кавычек.

3 голосов
/ 13 июня 2011

в соответствии со спецификацией ecmascript это не разрешено,

из ecmascript-262: http://www.ecma -international.org / публикации / файлы / ECMA-ST / ECMA-262.pdf

7.6.1.1 Keywords
The following tokens are ECMAScript keywords and may not be used as Identifiers in ECMAScript programs.

break, do, instanceof, typeof, case, else, new, var, catch, finally, return, void, continue, for, switch, while, debugger, function, this, with, default, if, throw, delete, in, try

на основе этого сафари является предпочтительным поведением

1 голос
/ 13 июня 2011

Похоже, что Chrome и Firefox проводят четкое различие между идентификаторами (переменными, объектами, функциями и т. Д.) И свойствами объекта.Я попытался со всеми зарезервированными словами и, как объект, они «работают»:

var myObject = { new : 30, var: 20 }

Вы можете получить доступ к каждому свойству, и SyntaxError не будет брошен.

...