什么是+&引用;你喜欢JavaScript吗?

什么是+&引用;你喜欢JavaScript吗?,javascript,Javascript,考虑以下代码 var value = 0; for (var i=0; i < arguments.length; i++) { value += +!!arguments[i]; } var值=0; for(var i=0;i1,false=>0) falsy值是强制为false的任何值。falsy值是0,“,NaN,null,未定义,当然还有false。真实的价值是任何其他价值 因此,最终结果是将参数中的truthy值的计数添加到值 这是JavaScript中一种很好的编程风

考虑以下代码

var value = 0;
for (var i=0; i < arguments.length; i++) {
    value += +!!arguments[i];
}
var值=0;
for(var i=0;i

什么是
+
!!arguments[i]
是一种常见的习惯用法,它应用两次逻辑求反,将表达式
arguments[i]
转换为实际的布尔值

比如说,

console.log(!!{});
// true
为什么我们需要两个逻辑否定?因为,它不会改变数据的奇偶性。比如说,

console.log(!!{});
// true
如果数据是原始数据,则
!Truthy
将变为
false
,然后再次反转
!false
,您将得到
true

如果数据是原始数据,则
!Falsy
将变为
,然后再次反转
!如果为true
,您将得到
false

console.log(+true);
// 1
console.log(+false);
// 0

+
运算符位于
+!!参数[i]
用于确保从布尔值中获取一个数值(正如
!!参数[i]
保证提供一个布尔值)

在JavaScript中,当
true
转换为数字时,您将得到
1
,对于
false
,将得到
0

console.log(+true);
// 1
console.log(+false);
// 0

它不是一个运算符,而是三个:
+
然后是
两次

它的作用是应用
参数[i]
,将truthy值
false
或falsy值转换为
true
,然后应用
使
为false
=>
为true
,反之亦然,然后应用一元数
+
将结果转换为数字(
true
=>
1
false
=>
0

falsy值是强制为
false
的任何值。falsy值是
0
NaN
null
未定义
,当然还有
false
。真实的价值是任何其他价值

因此,最终结果是将
参数中的truthy值的计数
添加到

这是JavaScript中一种很好的编程风格吗


使用
把真实的东西变成真实的,把虚假的东西变成虚假的,这是完全正常的做法。使用一元数
+
将某物转换为数字也是完全正常的做法。

通常
用于将变量转换为布尔类型,
+
转换为数字。 在本例中,首先将其转换为布尔值,然后再转换为数字(在本例中为1或0)。
变量
value
包含传递给函数的参数数。

是的,我应该参考
作为一个惯用单元,说得好。也许你可以对第二个问题发表意见,即“这是JavaScript中一种好的编程风格吗?”。对于未经培训的人来说,不是很容易理解。可以很容易地做得更好,比如使用三元运算符related:。实际上,这里不需要
+
,因为加法会强制布尔值为一个数字。好吧,为了一致性,我建议您开始使用“truey”。@torazaburo:“truthy”和“falsy”与“truthy”和“falsy”并不相似。它必须是“真实”和“虚假”或“真实”和“虚假”或“真实”和“虚假”。英语是无政府主义的。