2016-08-15 4 views
11
var obj = { prop = [1,2,3] }; 

Код, указанный выше, содержит опечатку, вместо = должен быть двоеточие. Но что меня удивило сообщение об ошибке VM:Что такое сокращенная собственность JavaScript?

var obj = { prop = [1,2,3] }; 
      ^^^^^^^^^^^^^^ 
SyntaxError: Invalid shorthand property initializer 

Я искал «JavaScript обобщающего свойства», но этот термин до сих пор мне не ясно. Что означает «короткое свойство» в контексте этого сообщения об ошибке?

+1

'=' используется только для присвоения переменной, а не свойства .. Заменить '=' в ':' – choz

+4

@choz Это довольно очевидно, что OP знает, что с учетом первого предложения: «В приведенном выше коде есть опечатка, должен быть двоеточие вместо' = '.". – Paulpro

+0

@Paulpro Либо он не был там раньше, либо я полностью его пропустил. – choz

ответ

14

С ES6 вы можете использовать сокращенные имена свойств, которые позволят вам написать что-то вроде этого.

var s = 'abc'; 
var n = 1; 
var o = { s, n }; // This is equivalent to { s: s, n: n } 

В вашем случае, prop = [1,2,3] был проанализирован в качестве одного сокращённого свойства (s и n в приведенном выше примере), но это было не имя собственное имущество.

3

Firefox имеет другое сообщение об ошибке, которое, по моему мнению, является более полезным:

SyntaxError: missing : after property id 

То есть, есть недостающий :. Как вы говорите, вы должны использовать : вместо =.

Чтобы было ясно, что «сокращенное свойство» не имеет смысла в спецификации ES6. Это просто выражение, изобретенное Chrome, чтобы помочь вам заметить вашу ошибку. Кажется, они потерпели неудачу.

snak's guess является то, что хром относится к PropertyDefinition, состоящий из IdentifierReference, используемого в ObjectLiteral. Очевидно, prop = [1,2,3] не является ИдентификаторReference, так что, возможно, имеет смысл жаловаться на это. Было бы еще больше смысла жаловаться, что это не PropertyDefinition в гораздо более распространенной форме PropertyName:AssignmentExpression. Или MethodDefinition.

+1

В этом вопросе уже сказано: «В приведенном выше коде есть опечатка, должна быть двоеточие вместо =». Вопрос заключается в том, почему эта ошибка сформулирована именно так. –

+0

@EvanTrimboli Да. Вы должны читать между строками. Мой ответ был попыткой сказать «перестаньте использовать глупый браузер, такой как Chrome, который дает такие неразумные вводящие в заблуждение сообщения об ошибках» вежливо. – Oriol

+2

Хорошо, хорошо, что все еще не отвечает на вопрос. –

0

Поскольку официальных MDN не существует, я могу только предположить, что это может означать.

Рассмотрим следующий пример:

Есть два способа создания массива.

Долгий путь (вид):

var cars = new Array("Saab", "Volvo", "BMW"); 

Короткий путь:

var cars = ["Saab", "Volvo", "BMW"]; 

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

Длинный путь:

var person = new Object(); 
person.firstName = "John"; 
person.lastName = "Doe"; 

Короткий путь:

var person = {firstName: "John", lastName: "Doe"};