第一部分:
因为当您添加两个数组时,一切都按预期工作:
[] + [] //output:''
添加数组和对象也符合我们的期望:
[] + {}
output:'[object Object]'
JavaScript中的 {} + {}
是NaN
?
这是意想不到的结果,这背后的原因是什么?
第二部分:
在没有前缀0的字符串比较中,3大于12:
"3" > "12"
: true
使用填充,一切正常:
"03" > "12"
: false
字符串比较必须使用前缀0吗?添加前缀0的原因是什么?
答案 0 :(得分:14)
{} + {}
被解释为空块{}
,后跟表达式+ {}
。 {}
没有数值,因此会产生NaN
。如果您强制将其评估为({} + {})
之类的表达式,则会获得[object Object][object Object]
。
它们是字符串,所以它们会按字典顺序进行比较。如果您想将它们作为数字进行比较,请先使用parseInt
或parseFloat
解析它们。
答案 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");