为什么这个无效语法不会抛出错误?

Kon*_*owy 1 javascript

我希望下面的代码会抛出语法错误,因为'some string' [{}],但它工作得很好。虽然财产是undefined.

const object = {
  property: 'some string' [{}]
}

console.log(object)
Run Code Online (Sandbox Code Playgroud)

另一方面,这会按预期抛出错误:

const object = {
  property: 'some string' []
}

console.log(object)
Run Code Online (Sandbox Code Playgroud)

Sam*_*jig 7

首先是语法不无效。该代码正在寻找一个属性[object Object](该{}属性被转换为字符串)。

第二个是无效语法,因为属性访问运算符中没有任何内容。

但请注意,由于 this 不是string,因此String您无法自己添加自定义属性。

.length您仍然可以查找属性,因为原型上还有和.slice()等内容.substring()

例如,如果您将自定义属性添加到原型中,您可以这样做:

String.prototype["[object Object]"] = "banana";

const object = {
  property: 'some string' [{}]
}

console.log(object)
Run Code Online (Sandbox Code Playgroud)


moc*_*cha 5

您实际上只是尝试像这样访问字符串(使用括号符号):

property: 'some string'[{}]
Run Code Online (Sandbox Code Playgroud)

两个括号之间的任何内容都会被计算并强制转换为字符串,因此您实际上会得到:

property: 'some string'['[object Object]']
Run Code Online (Sandbox Code Playgroud)

众所周知,字符串没有属性[object Object]

您的第二个示例无效,因为使用括号表示法时括号之间必须有一些内容。