JavaScript中的{} + {}是什么?

时间:2013-04-14 06:13:06

标签: javascript

第一部分:

因为当您添加两个数组时,一切都按预期工作:

 [] + []     //output:''

添加数组和对象也符合我们的期望:

 [] + {}
output:'[object Object]'
JavaScript中的

{} + {}NaN? 这是意想不到的结果,这背后的原因是什么?

第二部分:

在没有前缀0的字符串比较中,3大于12:

"3" > "12"
: true

使用填充,一切正常:

 "03" > "12"
: false

字符串比较必须使用前缀0吗?添加前缀0的原因是什么?

3 个答案:

答案 0 :(得分:14)

  1. {} + {}被解释为空块{},后跟表达式+ {}{}没有数值,因此会产生NaN。如果您强制将其评估为({} + {})之类的表达式,则会获得[object Object][object Object]

  2. 它们是字符串,所以它们会按字典顺序进行比较。如果您想将它们作为数字进行比较,请先使用parseIntparseFloat解析它们。

答案 1 :(得分:12)

第一部分

1 -

当您添加两个数组时,您可以为每个数组获取原始值,并且可以将数组转换为类似以下[1,2,3,4].toString() //=> 1,2,3,4的字符串,这样两个emty数组就会生成空字符串,并且它们之间的连接会生成空字符串。

2- 当你用对象添加空字符串的第二个时,你将对象转换为字符串,如图所示,对象的字符串值为[object Object]

3 -

当您添加两个对象时,按照显示的方式,您只需通过+将对象转换为数字question

第二部分

字符串比较是从左到右逐字母进行的,只要有一个参考,就会确定返回值,忽略字符串长度,如下所示

"3" > "12"
ASCII中的<3>“3”大于“1”,因此返回为TRUE

"03" > "12"

ASCII中的“0”小于“1”,因此返回为假

答案 2 :(得分:0)

我在最新的Firefox,Safari和Chrome中尝试了以下内容:     a = []; B = {};的console.log(A + A);的console.log(A + B);的console.log(B + b)的

火狐

(an empty string)
[object Object]
[object Object][object Object]

[object Object]
[object Object][object Object]
undefined   

Safari浏览器

[object Object]
[object Object][object Object]

字符串“3”在字典上比字符串“12”更大。如果你真的想要将字符串作为数字进行比较,你必须告诉JavaScript你想要它的完成方式。

parseInt("3") > parseInt("12");