zhe*_*oli 1 javascript object-literal
当object literal调用toString()方法时{}.toString()会导致语法错误,但是当数组文字调用toString()时就可以了.当我将对象文字分配给变量时,那么当它调用该toString()方法时就可以了.为什么?例如:
var o = {};
o.toString(); // OK
{}.toString();
// > Uncaught SyntaxError: Unexpected token .
[1, 2, 3].toString(); // OK
Run Code Online (Sandbox Code Playgroud)
谢谢!
这是因为{}首先将其视为有效块,而不是该上下文中的文字.
简单来说 - 考虑从左到右解释该行,遇到{并因此期望块已经开始.当块结束时,它会遇到.并且那里不允许使用该标识符.
如果您使用({}).toString()它将起作用.
这是因为行开头(并因此需要一个表达式,它正确地将其标识{}为一个被计算为空对象的表达式,因此允许使用'.toString()`.
如果{}在另一个上下文中使用 - 例如在您的示例中,o = {}这被正确解释为空对象,因为它位于赋值的右侧(之后=).
请注意,在ES6中存在类似但更常见/实际的情况,其中理解这一点很重要 - 当在单行箭头函数中返回对象时,例如
[1,2,3,4].map(val => { v: val, isOdd: v % 2 === 1 }) // ERROR
[1,2,3,4].map(val => ({ v: val, isOdd: v % 2 === 1 })) // OK
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |