function countZeroes(array) {
function counter(total, element) {
return total + (element === 0 ? 1 : 0);
}
return reduce(counter, 0, array);
}
===
是用来做什么的?reduce
是内置函数吗?它是用来做什么的?- 请解释一下这个程序的步骤。
function countZeroes(array) {
function counter(total, element) {
return total + (element === 0 ? 1 : 0);
}
return reduce(counter, 0, array);
}
===
是用来做什么的?reduce
是内置函数吗?它是用来做什么的?这是严格相等运算符。
它比较两个值,并根据严格相等比较算法检查它们是否相同。
这与==
相反,如果被比较的值类型不同,它会尝试强制转换其中一个或两个值。那个使用抽象相等比较算法。
抽象算法的规则可能会很复杂。除非有特殊需要,最好使用===
。
来自 MDN文档
标准的相等运算符(== 和 !=)会比较两个操作数的值,而不考虑它们的类型。严格的相等运算符(=== 和 !==)则会对相同类型的操作数进行相等比较。如果操作数必须是特定类型和值,或者操作数的确切类型很重要,那么请使用严格的相等运算符。否则,请使用标准的相等运算符,即使操作数的类型不同,也可以比较它们的身份。(element === 0 ? 1 : 0)
element
的值恰好等于0
,那么使用1
,否则使用0
。return total + (element === 0 ? 1 : 0);
element
等于0
,函数的返回值将为total + 1
;否则返回值将为total + 0
。if-else
语句重写这段代码:if( element === 0 ) {
return total + 1;
} else {
return total + 0;
}
===
和==
是相同的,不同之处在于它不会强制转换变量类型。
0 == '0' -> true
0 === '0' -> false
reduce不是内置函数,但它的确会对数组中的每个元素运行计数器。
因此,对于数组的每个元素,都将检查该元素是否为0
,如果是,则总数将递增。
===是身份运算符,类似于==,但不执行类型转换。
这个函数似乎计算数组中零的数量并返回计数。
"==="表示"完全相等",即值和类型都相同。所以...
var x = 5;
if (x === 5) {
alert("This will happen");
} else {
alert ("This won't");
}
这个很少用到。
reduce函数可能是指Array.prototype.reduce()方法,它被用来按顺序(有点像)将一个函数应用于数组中的值。因此,在这种用法中,它将'counter'函数应用于数组中的所有内容,这将计算数组中零的数量并返回该值。
这是一个非常好的问题,通常来自其他编程语言的开发人员往往难以理解使用 === 相对于 == 的重要性。
1. 5 == '5' //true why? Because it do
type conversion whereas in case with
=== 5 === '5'//false because '5' is a string as compare to number 5.
2. '\t\r\n' == 0 //true this lack of transitivity is alarming and cause
lot of errors.
3. Use JsLint ...it will help writing better JS code keep your code safe
from this kind of issues.
4. Moreover their is a performance penalty for using == when you are
comparing number with a string.
=== 严格相等,两边必须是相同的类型并且相等。这用于避免比较两个不相等的类型(通常是布尔值 false 和数字 0)。
===
是一种严格的等式比较。在JavaScript中,==
运算符会进行类型转换,常常会产生意外的结果,例如 ' ' == false
。因此大部分JavaScript开发者尽可能使用===
。
很难说reduce()
是什么。它不是JavaScript中内置的全局函数,但它可能是指{{link2:JavaScript数组中的reduce()
方法}}。 reduce()
方法对数组中的每个元素执行一次counter()
,并且每次调用counter()
时,它都会用counter()
调用返回的值替换total
。因此,给定的函数计算数组中严格等于零的元素数。
关于 === 的其他答案请参考。
reduce 是 JS 中内置的函数,它类似于 "foreach",可以在数组中移动每个元素。
它从初始值开始,对第一个元素调用 counter()。
如果该元素为 0,则返回总和(即零)+1,然后返回值将成为数组中第二个元素的“总和”,以此类推...
总之:reduce 在数组的每个元素上调用 counter,进行测试并将其值添加到返回值的 (n-1)st 元素中。