Вопрос о кавычках объекта Javascript Shorthand в ключе

Я новичок в javascript, и мне интересно цитировать ключи в сокращении объекта.

Поэтому я использую библиотеку OpenLayers js, и многие конструкторы объектов принимают {options} в качестве аргумента для установки различных переменных, обратных вызовов и т. д.

В моем коде у меня есть куча объектов управления, которые используются для управления картой и еще чем-то.

    controls = {
        navigation   : new OpenLayers.Control.Navigation({'autoActivate' : false}),
        zoom_out_box : new OpenLayers.Control.ZoomBox({
            alwaysZoom  : true,
            out         : true
        }),
        ...     
    };

В некоторых из своих примеров они используют одинарные кавычки для ключей, а в других они не будут использовать {'ascending':false} или {visibility: false}.

Я подумал, что, возможно, это связано с зарезервированными словами или функциями, а не с переменными, но я могу добавить функции в окно масштабирования:

controls= {
        zoom_out_box : new OpenLayers.Control.ZoomBox({
            if      : function(e){alert('blah');}
        }),
       zoom_out_box_2 : new OpenLayers.Control.ZoomBox({
            'if'    : function(e){alert('blah');}
        })
};

Я тестирую его с помощью onlclick="controls.zoom_out_box.if(this)", и он отлично предупреждает, и я не получаю предупреждений или ошибок в firebug.

Так какая разница в цитировании?


person Nate    schedule 26.07.2011    source источник
comment
stackoverflow.com/questions/2348867/   -  person James Montagne    schedule 27.07.2011


Ответы (2)


Вы можете использовать неидентификаторы в качестве ключей в объекте JavaScript, и в этом случае требуются кавычки:

var obj = { 'not-an-identifier': 42 };

В случае, когда идентификатор заключен в кавычки, это просто вопрос стиля/предпочтения/соглашения.

В качестве примечания: доступ к неидентификаторам всегда должен осуществляться с использованием записи в виде квадратных скобок/массива (obj['not-an-identifier']), а не записи с точкой (.).

person FishBasketGordo    schedule 26.07.2011

принятый в настоящее время ответ неверен:

Вы можете использовать неидентификаторы в качестве ключей в объекте JavaScript, и в этом случае требуются кавычки.

Кавычки не требуются, если вы используете числовой литерал в качестве имени свойства.

Из Имена свойств/ключей объектов без кавычек в JavaScript< /a>, моя статья на эту тему:

Кавычки можно опускать, только если имя свойства является числовым литералом или действительным именем идентификатора.

[…]

Скобочные обозначения можно безопасно использовать для всех имен свойств.

[…]

Точечная нотация может использоваться только, когда имя свойства является допустимым именем идентификатора.

Я также сделал инструмент, который сообщит вам, можно ли использовать какое-либо заданное имя свойства без кавычек и/или с записью через точку. Попробуйте его на странице mothereff.in/js-properties.

Снимок экрана

person Mathias Bynens    schedule 05.03.2012