Вопрос о названии объекта JavaScript
У меня вопрос о имени объекта JavaScript. Проверьте коды ниже:
<!DOCTYPE html>
<meta charset="UTF-8">
<title>An HTML5 document</title>
<script>
var obj = {
123: 'go' // 123 is not a valid JavaScript name. No error here.
};
var obj2 = {
123a: 'go' // An Error occurred.
};
</script>
Если имя свойства JavaScript-объекта является допустимым идентификатором JavaScript, котировки имен объектов не нужны.
например.
({go_go: 'go'}); // OK
({go-go: 'go'}); // Fail
В вышеприведенных кодах 123a
является недопустимым именем JavaScript и не цитируется. Таким образом, произошла ошибка. Но 123
также является недопустимым именем JavaScript, а также не цитируется, почему здесь нет ошибки? Лично я думаю, что 123
должен быть указан.
Спасибо!
Ответы
Ответ 1
Посмотрите на спецификацию:
ObjectLiteral :
{ }
{ PropertyNameAndValueList }
{ PropertyNameAndValueList ,}
PropertyNameAndValueList :
PropertyAssignment
PropertyNameAndValueList , PropertyAssignment
PropertyAssignment :
PropertyName : AssignmentExpression
get PropertyName ( ){ FunctionBody }
set PropertyName ( PropertySetParameterList ){ FunctionBody }
PropertyName :
IdentifierName
StringLiteral
NumericLiteral
Таким образом, имя свойства может быть либо именем идентификатора, либо строкой, либо числом. 123
- это число, тогда как 123a
не является ни тем, ни другим.
Ответ 2
Ключевая часть каждой пары ключ-значение может быть записана как любой действительный идентификатор JavaScript, строка (завернутая в кавычки) или число:
var x = {
validIdentifier: 123,
'some string': 456,
99999: 789
};
См. спецификацию: http://bclary.com/2004/11/07/#a-11.1.5
Ответ 3
123
не является, по сути, недопустимым именем свойства. Любое имя свойства, которое не является строкой, является typecast для строки с помощью метода toString
.