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中的[]+[]是啥的主要内容,如果未能解决你的问题,请参考以下文章