如果您在浏览器中打开JS控制台(在我的情况下是Chrome)并输入:
{} + []
Run Code Online (Sandbox Code Playgroud)
你会得到0,但是当你打字的时候
console.log({} + [])
Run Code Online (Sandbox Code Playgroud)
你得到[对象] ...任何想法为什么结果不同?我一直以为当你在那里打字它总是用console.log包装它?
Que*_*tin 12
{}可以是空块或空对象文字,具体取决于上下文.
+ 可以是一元加运算符,也可以是连接运算符,具体取决于上下文.
第一个代码示例是一个空块,它可能也不存在,使表达式相同+[],意思是"空数组转换为数字".
您不能将块作为函数参数,因此第二个代码示例{}是一个对象,代码意味着"使用数组Concatinate一个对象"(隐式地将对象和数组转换为字符串).
当您{}在开头看到字符时,它被解释为空文本block或empty对象文字(当您创建对象时).
当您使用expression或语句时,+表示加号运算符,coerces其操作数(在本例中为将[])表示数字.
所以+[]是相同的Number([]),其评估为0.
该unary plus运营商内部使用的ToNumber抽象操作.
console.log(Number([]));Run Code Online (Sandbox Code Playgroud)
换句话说,{} + []表达式是一个empty代码块,后面跟着array一个数字(Number[])的约束.
在第二个示例中,您只向数据提供了concat一个对象文字(空对象).这就是你收到的原因[object Object].
| 归档时间: |
|
| 查看次数: |
1143 次 |
| 最近记录: |