javascript中的[]+[]是啥

Posted

技术标签:

【中文标题】javascript中的[]+[]是啥【英文标题】:What is [] + [] in javascriptjavascript中的[]+[]是什么 【发布时间】:2012-02-19 17:21:04 【问题描述】:

[]+[]、[]+、+[]、+的值是多少?怎么做?

这是我的控制台日志

> + 
>NaN
>[] + []
>''
> + []
>0
>[] + 
>[Object object]

还有

>var a = [] + 
>a
>[Object object]
>var b =  + []
>b
>[Object object]

赋值时值如何变化?

SRC:video

【问题讨论】:

这些只是警告,没有任何设计原因 【参考方案1】:

+ [] 的不同之处在于,当您执行赋值时,它会在表达式上下文中解析,但当您自己键入时,它会被解析为语句

var b = /*an expression*/

这种区别在使用匿名函数时很明显

//expression
var f = function(); //allowed

//statement
function(); //not allowed. function statements need a name.

所以在表达式上下文中,我们将(空对象)和[](空列表)添加到binary + operator。由于type conversion rules,转换为字符串"[object Object]",[]转换为empty string,它们的串联也是“[object Object]”。

//parenthesis force an expression 
( + "hello")  //"[object Object]hello"
( + [])       //"[object Object]"
( + [1])      //"[object Object]1"
( + [1,2])    //"[object Object]1,2"

同时,当我们删除括号时, 被解析为空块语句。出于实际目的,它就像我们完全提交它一样工作,留下一个unary + operator 来处理列表。这会将其转换为数字。

+[]     // 0
 + [] // 0
+     // NaN
 +  // NaN
 +"17"// 17

虽然能够从语句(而不仅仅是从表达式)中获取值可能看起来很奇怪,但 javascript 标准 确实 specify 为语句提供值。在我们的例子中,我们的程序是两个源元素的列表,它们的value is given by 最后一条语句是expression statement。

查看语句完成值的方法是通过 eval:

 eval("")  //undefined
 eval("1")   //1
 eval("1;2") //2

【讨论】:

【参考方案2】:

+ 运算符连接字符串。所以它会尝试将对象和数组转换为字符串。

转换为 '[Object object]'[] 转换为 ''

编辑:我无法解释为什么 + []0 以及为什么 () + []"[object Object]"

【讨论】:

+ [] 我猜 被解释为一个空块语句,所以+ 被解释为 unary 版本,所以你'剩下+[],它对数组进行toNumber转换(通过toString转换) 我是正确的;例如alert(1) 会提醒而不是抛出 missing :

以上是关于javascript中的[]+[]是啥的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中的Event事件对象详解

是啥? JavaScript 中的语法是啥意思?

数组排序中的 JavaScript 与 PHP

JavaScript基础

前端—JavaScript

JavaScript 中的 + 是啥? [复制]