Определение объекта JavaScript в консоли

Когда я печатаю простые объекты в Chrome JavaScript Console, я получаю следующий вывод:

>true
true
>1/3
0.3333333333333333

И так далее.

Но синтаксическая ошибка возникает, когда я набираю объекты:

>{ a: 1, b: 2 }
SyntaxError: Unexpected token :
arguments: Array[1]
0: ":"
length: 1
__proto__: Array[0]
get message: function getter() { [native code] }
get stack: function getter() { [native code] }
set message: function setter() { [native code] }
set stack: function setter() { [native code] }
type: "unexpected_token"
__proto__: Error

Хотя я точно знаю, что это выражение можно было бы правильно использовать при инициализации объекта, потому что:

>obj = { a: 1, b: 2 }
Object
a: 1
b: 2
__proto__: Object

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

6 ответов

Решение

Потому что ваш оператор оценивается как блок, а не как объектное литеральное объявление.

Обратите внимание, что ExpressionStatement не может начинаться с открывающей фигурной скобки, потому что это может сделать его неоднозначным с блоком. Кроме того, ExpressionStatement не может начинаться с ключевого слова function, потому что это может сделать его неоднозначным с FunctionDeclaration.

Чтобы сделать его оценочным как выражение, оно должно быть правой частью присваивания, заключенное в скобки или предшествующее оператору. (!{a:1,b:2})

 { a: 1, b: 2 }

кодовый блок с двумя ошибочно помеченными переменными

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

({ a: 1, b: 2 })

Это потому что открытие { без контекста интерпретируется как начало блока. Вы можете использовать скобки:

({ a: 1, b: 2 })

Тем не менее, это всего лишь блок выполнения - как можно найти после if или же for, Таким образом, вы можете ввести:

{alert("Hello!");}

Вот еще об этом. Блокирует также и возвращаемые значения, что является одновременно и удивительным, и разочаровывающим.

Потому что ваш оператор оценивается как блок, а не как объектное литеральное объявление.

Правда джош

Если вы хотите, чтобы он оценивался как объект, просто напишите:

> ({a : 1, b : 2})
Object
a: 1
b: 2
__proto__: Object

Так как { a: 1, b: 2 } не является допустимым выражением для выполнения. JavaScript выглядит как блок кода, поскольку он начинается и заканчивается фигурными скобками.

Если вы попытаетесь ({ a: 1, b: 2 }), это будет работать.

Попробуйте это вместо этого:

({ "a" : 1, "b" : 2 })
Другие вопросы по тегам