首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么像{} toString()这样的对象文本调用.toString()方法不能导致错误?

为什么像{} toString()这样的对象文本调用.toString()方法不能导致错误?
EN

Stack Overflow用户
提问于 2017-05-29 10:58:24
回答 1查看 661关注 0票数 3

当对象文本调用toString()方法(如{}.toString() )时,会导致语法错误,但是当数组文本调用toString()时,就可以了。当我将对象文本赋值给一个变量时,当它调用toString()方法时就可以了。为什么?例如:

代码语言:javascript
运行
复制
var o = {};
o.toString();  // OK

{}.toString(); 
// > Uncaught SyntaxError: Unexpected token .
[1, 2, 3].toString(); // OK

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-29 11:00:53

这是因为{}首先被看作是一个有效的块,而不是上下文中的文字。

简单地说--考虑这一行是从左到右解释的,遇到{,因此期望一个块已经启动。当块结束时,它会遇到.,并且那里不允许该标识符。

如果你要使用({}).toString(),那就可以了。

这是因为行以(开头,因此需要一个表达式,因此它正确地将{}标识为一个表达式,该表达式被计算为空对象,因此允许‘.toString()’。

如果在另一个上下文中使用{} (例如,在您的示例o = {}中),则正确地将其解释为空对象,因为它位于赋值的右侧(在=之后)。

请注意,在ES6中,有一种类似但更常见/实际的情况,即当以一行箭头函数返回对象时,理解这一点很重要。

代码语言:javascript
运行
复制
[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
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44240838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档