Допустимые имена свойства объекта JavaScript

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

var b = {}
b['-^colour'] = "blue";     // Works fine in Firefox, Chrome, Safari
b['colour'] = "green";      // Ditto
alert(b['-^colour']);       // Ditto
alert(b.colour);            // Ditto
for(prop in b) alert(prop); // Ditto
//alert(b.-^colour);     // Fails (expected)

Это сообщение детализирует допустимые имена переменной JavaScript, и '-^colour' ясно не допустим (как имя переменной). То же относится к именам свойства объекта? При взгляде на вышеупомянутое я пытаюсь удаться если

  1. b ['-^colour'] недопустимо, но работает во всех браузерах причудой, и я не должен доверять ее для работы, продвигаясь

  2. b ['-^colour'] абсолютно допустимо, но это просто имеет форму, к которой можно только получить доступ этим способом - (это поддерживается так, Объекты могут использоваться в качестве карт, возможно?)

  3. Что-то еще

Как в стороне, глобальная переменная в JavaScript могла бы быть объявлена на верхнем уровне как

var abc = 0;

но мог также быть создан (насколько я понимаю) с

window['abc'] = 0;

следующие работы во всех вышеупомянутых браузерах

window['@£$%'] = "bling!";
alert(window['@£$%']);

Действительно ли это допустимо? Это, кажется, противоречит переменным правилам именования - или разве я не объявляю переменную там? Каково различие между переменной и именем свойства объекта?

68
задан Community 23 May 2017 в 11:55
поделиться

2 ответа

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

window['abc']

обращается к свойству. Это не переменная, хотя она относится к тому же значению (на глобальном уровне), как:

abc
61
ответ дан 24 November 2019 в 14:21
поделиться

Правила именования свойств объектов и правила именования переменных являются отдельными. Стандарт "резервирует" только несколько имен свойств (например, prototype и constructor, IIRC), но кроме них, можно использовать любые строки.

За исключением тех случаев, когда среда выполнения (т.е. браузер) решает добавить больше магических свойств, конечно. (Я слышал, что установка __proto__ ломает некоторые вещи довольно странным образом)

14
ответ дан 24 November 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: