对于堆栈溢出中涉及返回语句+ 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);
答案 0 :(得分:6)
变量前的+
是一元+
运算符。您可能熟悉一元-
,例如-x
。
+x
和-x
都将x
转换为数字,但是-x
也会更改其符号。这不是一元+
存在的主要目的,但这是一个很好的副作用。
因此,从此示例中可以看出a + b
和+a + +b
之间的区别:
x = '9'; // '9'
x = +'9'; // 9
x = '9' + '9'; // '99'
x = +'9' + +'9'; // 18
答案 1 :(得分:1)
假设(setq debug-on-message "\\`No docstring slot for")
或a
的类型为String,则在其前面添加一个b
运算符会将其强制为数字。
这可以确保+
将是’1’ + ‘1’
(添加2
s,而不是number
(包含11
s)。
答案 2 :(得分:0)
javascript具有一元运算符string
和+
,它们都将操作数转换为数字类型,但是-
运算符将结果取反。
例如:
-
答案 3 :(得分:0)
JavaScript是动态类型的,但是没有内置的运算符可用于强制转换值以确保它是用于操作的正确类型。因此,在将值视为数字或字符串等很重要时,会使用各种技巧。
在这种情况下,使用的运算符是“一元+”,它是“一元-”的自然对应物,用于写负数:就像“ -x”表示“ 0-x” ,“ + x”表示“ 0 + x”。对于数字,这无效,但是其他值将转换为数字。
这很重要,因为“二进制+”运算符根据其操作数的类型执行不同的操作:如果a是字符串,则a + b表示“将两个字符串附加在一起”而不是“将两个数字相加”。 / p>
给定一个假想的cast_to_number函数,该方程可以更容易地写为return cast_to_number(a) + cast_to_number(b)
。
答案 4 :(得分:0)
+
一元运算符用于JavaScript中的显式强制。
即使有些开发人员对此视而不见,但说var num = 3 + +c;
还是很丑陋,尤其是对于那些不了解强制性甚至可能看起来像“错误”的代码的人。
+
一元运算符最常见的实际用法可能是获取日期的数字时间戳记
var timestamp = +new Date(); // this works!
也许-
一元运算符是一件很好的备忘录,由于某种原因,我们的人脑似乎更易于解释。基本上,如果我们看到var x = -c;
,则假定编译器为:
c
的数字强制执行一个值-
) +
一元运算符执行相同的操作,只是没有符号翻转。