什么是+;a和x2B+;b用JavaScript是什么意思?

什么是+;a和x2B+;b用JavaScript是什么意思?,javascript,multidimensional-array,Javascript,Multidimensional Array,有一个关于堆栈溢出的嵌套数组问题的答案,该问题涉及return语句+a++b。(无句号)这是什么?它有什么作用?它似乎在增加,但我不确定它是如何做到的。它与a+b有什么区别?代码如下所示,它可以工作: var array= [1, 2, [3, 4], [], [5]]; var sum = array.toString().split(",").reduce(function(a, b) { return +a + +b; }); console.log(sum); 假设a或b为Stri

有一个关于堆栈溢出的嵌套数组问题的答案,该问题涉及return语句+a++b。(无句号)这是什么?它有什么作用?它似乎在增加,但我不确定它是如何做到的。它与a+b有什么区别?代码如下所示,它可以工作:

var array= [1, 2, [3, 4], [], [5]];
var sum = array.toString().split(",").reduce(function(a, b) { return +a + +b; 
});

console.log(sum);

假设
a
b
为String类型,在其前面添加
+
运算符将强制其为数字


这确保了
'1'+'1'
将是
2
(添加
数字
s)而不是
11
(串接
字符串
s)。

javascript具有一元运算符
+
-
,两者都将操作数转换为数字类型,但是
-
操作符否定结果

例如:

> -'20'
-20
> +'500' + +'600'
1100

变量前面的
+
是一元
+
运算符。您可能熟悉一元
-
,例如
-x

+x
-x
都将
x
转换为数字,但
-x
也会更改其符号。这不是一元
+
存在的主要目的,但它是一个很好的副作用

因此,
a+b
+a++b
之间的差异在本例中可见:

x = '9';          // '9'
x = +'9';         // 9
x = '9' + '9';    // '99'
x = +'9' + +'9';  // 18

JavaScript是动态类型化的,但没有用于强制转换值的内置运算符,以确保它是操作的正确类型。因此,当一个值被视为数字或字符串等非常重要时,会使用各种技巧

在这种情况下,使用的运算符是“一元+”,它是“一元-”的自然对应项,用于写入负数:正如“-x”表示“0-x”,“+x”表示“0+x”。对于数字,这没有影响,但其他值将转换为数字

这一点很重要,因为“binary+”运算符根据其操作数的类型执行不同的操作:如果a是字符串,则a+b的意思是“将两个字符串附加在一起”,而不是“两个数字求和”


给定一个虚构的cast-to-number函数,该方程可以更容易地写成
返回cast-to-number(a)+cast-to-number(b)

在JavaScript中,
+
一元运算符用于显式强制

尽管有些开发人员看不起它,说
var num=3++c
相当难看,尤其是对于不知道手头的强制的人来说,甚至可能是看起来像“错误”的代码

+
一元运算符最常见的实际用途可能是获取日期的数字时间戳

var timestamp = +new Date(); // this works!
也许一个好的记忆是
-
一元运算符,出于某种原因,我们的大脑似乎更乐于解释它。基本上,如果我们看到
varx=-c我们假定编译器:

  • 尝试对变量
    c
  • 如果它可以返回一个数字,则翻转符号并返回负数(
    -

  • +
    一元运算符执行相同的操作,只是没有符号翻转

    前面的
    +
    将变量强制为一个数字。
    “5”+6==“56”
    而变量前面的
    ++5”+6===11
    意味着开发人员不知道发生了什么,但如果可能的话,无论如何都会尝试计算。”…出于某种原因,我们的大脑似乎更乐于解释“;我认为这比这简单得多:一元-实际上有一个目的,一元+实际上只是作为它的补充存在,它作为施法者的副作用是偶然的。@IMSoP是的,从神经质的角度来看,这有点滑稽,因为双重肯定的信息对我们的认知感官来说是不必要的,而我们的大脑被编程成忽略它是多余的信息。我认为我们根本不需要把心理学带到这里来。在强类型语言中,操作符实际上什么也不做:它将作用于一个数字,并产生相同的数字;一个健全的编译器可能会在不存在的情况下对其进行优化。它的存在是因为一些语言设计者对对称性的渴望,然后由于JS没有任何用于强制转换值的语法而被滥用。