JavaScript 中的 + 是啥? [复制]
Posted
技术标签:
【中文标题】JavaScript 中的 + 是啥? [复制]【英文标题】:What is + in JavaScript? [duplicate]JavaScript 中的 + 是什么? [复制] 【发布时间】:2013-04-06 10:52:33 【问题描述】:第一部分:
因为当您添加两个数组时,一切都按预期工作:
[] + [] //output:''
添加一个数组和一个对象也符合我们的预期:
[] +
output:'[object Object]'
+
在 javascript 中是 NaN
?
这是意想不到的结果,那么这背后的原因是什么?
第二部分:
无前缀0的字符串比较中,3大于12:
"3" > "12"
: true
使用填充,一切正常:
"03" > "12"
: false
字符串比较时必须使用前缀0吗?添加前缀0的原因是什么?
【问题讨论】:
[] + [] == ''
适合您吗?你的逻辑是什么?
@SergioTulentsev:数组的字符串表示形式是由逗号连接的项目的字符串表示形式。如果它是一个空数组,它的字符串表示将是空的,如果你连接两个空字符串,你会得到一个空字符串。
每个问题你应该发布一个问题。
@SergioTulentsev JavaScript 不支持添加对象。他们首先通过ToPrimitive()
,然后+
进行相应的操作(字符串、数字等)。所以,[] + []
变成了'' + ''
。
也可以尝试比较:+"3" > +"12"
【参考方案1】:
+
被解释为空块 后跟表达式
+
。 没有数值,所以它产生
NaN
。如果你强制它被评估为像( + )
这样的表达式,你会得到[object Object][object Object]
。
它们是字符串,因此将按字典顺序进行比较。如果您想将它们作为数字进行比较,请先使用parseInt
或parseFloat
解析它们。
【讨论】:
【参考方案2】:第一部分
1-
当您添加两个数组时,您获取每个数组的原始值,并且可以将数组转换为字符串,如下面的[1,2,3,4].toString() //=> 1,2,3,4
,因此两个 emty 数组生成为空字符串,并且它们之间的连接生成空字符串。
2-
当您第二次使用对象添加空字符串时,您正在将对象转换为字符串,如图所示,对象的字符串值为[object Object]
3-
当您添加两个对象时,您只是通过+
将对象转换为数字,请检查此question
第二部分
字符串比较是从左到右逐个字母进行的,一旦有偏差,就会确定返回值,忽略字符串长度,如下所示
"3" > "12"
ASCII 中的“3”大于“1”所以返回 TRUE
"03" > "12"
ASCII中的“0”小于“1”所以返回为False
【讨论】:
【参考方案3】:我在最新的 Firefox、Safari 和 Chrome 中尝试了以下操作: 一个 = []; 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");
【讨论】:
以上是关于JavaScript 中的 + 是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 中的 define([ , function ]) 是啥? [复制]