我希望下面的代码会抛出语法错误,因为'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)
首先是语法不无效。该代码正在寻找一个属性[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)
您实际上只是尝试像这样访问字符串(使用括号符号):
property: 'some string'[{}]
Run Code Online (Sandbox Code Playgroud)
两个括号之间的任何内容都会被计算并强制转换为字符串,因此您实际上会得到:
property: 'some string'['[object Object]']
Run Code Online (Sandbox Code Playgroud)
众所周知,字符串没有属性[object Object]。
您的第二个示例无效,因为使用括号表示法时括号之间必须有一些内容。