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]

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

【讨论】:

【参考方案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中的“变量|| ”是啥? [复制]

JavaScript 中的 define([ , function ]) 是啥? [复制]

JavaScript 中的 ?: 语法是啥? [复制]

Javascript 中的 !function 是啥意思? [复制]

JavaScript 中的“=>”是啥意思? [复制]

javascript 中的 obj?.prop 语法是啥? [复制]