Поддержка браузером использования зарезервированного слова в качестве имени свойства в JavaScript

Я пытаюсь использовать "для" в качестве имени свойства объекта. Кажется, он отлично работает в IE7, IE8, Firefox, Chrome и Opera, но, видимо, не в Safari.

Насколько я понимаю, ECMAScript 5 позволяет это (как обсуждалось в ключевых словах JavaScript в хэш-ключах).

Могу ли я получить полный список браузеров, которые поддерживают / не поддерживают это где-то?

РЕДАКТИРОВАТЬ: На самом деле, автоматическая строковая строчка CoffeeScript имен зарезервированных слов свойства, это заставило меня поверить, что это работает После повторного тестирования, похоже, он нигде не работает, поэтому возникает вопрос: есть ли браузеры, которые разрешают это согласно спецификации ECMAScript 5?

4 ответа

Решение

Здесь есть таблица, показывающая поддержку браузером функций ECMAScript 5: http://kangax.github.com/es5-compat-table/

Зарезервированные слова могут использоваться в качестве имен свойств в IE9, Firefox 3.5+ и Chrome 7+, Safari 5.1+.

Вы можете использовать эти слова, но только как строки, а не как сокращенные свойства.

foo['class']; // cool
foo.class;    // not cool

Но вот фактический список, который вы просили. Ни один из них не может быть использован через синтаксис точки свойства. https://web.archive.org/web/20140902235313/http://javascript.about.com/library/blreserved.htm


Кроме того, CoffeeScript замечает это только слегка по касательной и автоматически переводит их в строку. http://jashkenas.github.com/coffee-script/

Входные данные:

$('.account').attr class: 'active'
log object.class

JS Ouptput:

$('.account').attr({
  "class": 'active'
});
log(object["class"]);

Я думаю, что это чертовски аккуратно.

Возможно, вопрос не столько в том, могут ли зарезервированные слова использоваться в качестве имен свойств для объектов - они могут. Похоже, реальный вопрос здесь заключается в том, могут ли они быть использованы голыми (то есть без кавычек). Простое использование зарезервированных слов поддерживается начиная с ES5, но не все переводчики поддерживают функции ES5. Как уже упоминалось, здесь есть хороший стол...

http://kangax.github.io/es5-compat-table/

Если вы просто делаете кодирование в NodeJS, вам не нужно беспокоиться об этом типе проблемы. Если вы заботитесь о переносимости вашего кода в самых разных средах (без использования языка, подобного CoffeeScript, который компилируется в JavaScript), тогда ваш код должен заключать в кавычки зарезервированные слова...

определение...

var foo = {'for':'this works'};

доступ к...

foo ['for'];

После изучения, я думаю, я могу доказать, что использование зарезервированных слов в качестве имен свойств (если сделано с небольшим здравым смыслом) безвредно, будь то в obj['name'] или же obj.name синтаксис.

увидеть этот вопрос

Другие вопросы по тегам