16

第一部分:

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

 [] + []     //output:''

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

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

{} + {}在 JavaScript 中是NaN?
这是出乎意料的结果,那么这背后的原因是什么?

第二部分:

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

"3" > "12"
: true

使用填充,一切正常:

 "03" > "12"
: false

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

4

3 回答 3

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

  2. 它们是字符串,因此将按字典顺序进行比较。如果要将它们作为数字进行比较,请先使用parseIntor解析它们parseFloat

于 2013-04-14T06:17:03.083 回答
12

第一部分

1-

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

2-当您添加空字符串与对象时,您正在将对象转换为字符串,如图所示,对象的字符串值为[object Object]

3-

当您添加两个对象时,您只是通过+检查此问题将对象转换为数字

第二部分

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

"3" > "12"

ASCII 中的“3”大于“1”,因此返回 TRUE

"03" > "12"

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

于 2013-04-14T06:27:58.557 回答
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   

苹果浏览器

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

按字典顺序,字符串“3”大于字符串“12”。如果您真的希望将字符串作为数字进行比较,您必须告诉 JavaScript 这就是您想要的方式。

parseInt("3") > parseInt("12");
于 2013-04-14T06:41:06.517 回答