2013-04-14 17 views
16

第1部分:JavaScript中的{} + {}是什么?

因为当你把两个数组,一切正常:

[] + []  //output:'' 

添加一个数组和对象也符合我们的预期:

[] + {} 
output:'[object Object]' 

{} + {}在JavaScript中是NaN
这是意外的结果,所以背后的原因是什么?

第2部分:

在字符串比较不带前缀0,3大于12:

"3" > "12" 
: true 

随着填充,一切正常:

"03" > "12" 
: false 

是前缀0强制字符串比较?添加0前缀的原因是什么?

+9

''[] + [] =='''预计对你有用吗?你的逻辑是什么? –

+3

@SergioTulentsev:数组的字符串表示形式是用逗号连接的项目的字符串表示形式。如果它是一个空数组,则其字符串表示将为空,并且如果连接两个空字符串,则会得到一个空字符串。 – icktoofay

+3

您应该为每个问题发布一个问题。 –

回答

12

第一部分

1-

时加两个阵列你把每个和数组的原始值可以被转换为字符串像下面[1,2,3,4].toString() //=> 1,2,3,4所以两个emty阵列生成空字符串,并且它们之间的连接生成空字符串。

2- 当第二时加空字符串对象,则是在对象转换为字符串,并作为显示的对象的字符串值是[object Object]

3-

时加两个物体,该方式显示你是刚刚由+支票转换的对象数这question

第二部分

字符串比较由字母制成字母从左至右并且只要有返回值被确定忽略像下面

"3" > "12" 

字符串长度的依从“3”在ASCII是大于“1大“所以返回的是TRUE

"03" > "12" 

”0“ 的ASCII小于 ”1“,返回的是假

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

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

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");