Javascript ===(三等于)

时间:2011-02-25 02:23:52

标签: javascript

提供以下代码段

function countZeroes(array) {
  function counter(total, element) {
    return total + (element === 0 ? 1 : 0);
  }
  return reduce(counter, 0, array);
}
  1. ===做什么?
  2. reduce是内置函数吗?它有什么作用?
  3. 请解释此计划的步骤。

8 个答案:

答案 0 :(得分:7)

它是严格的相等运算符。

它会比较两个值,并根据 Strict Equality Comparison Algorithm 检查它们是否相同。

这与==相反,===如果它们属于不同类型,它将试图强制被比较的一个或两个值。那个使用 Absract Equality Comparison Algorithm

抽象算法的规则可能很棘手。除非您特别需要==,否则最好使用(element === 0 ? 1 : 0)

来自MDC docs

  

标准相等运算符(==和!=)比较两个操作数而不考虑它们的类型。严格相等运算符(===和!==)对相同类型的操作数执行相等比较。如果操作数必须是特定类型以及值,或者操作数的确切类型很重要,请使用严格相等运算符。否则,使用标准相等运算符,它允许您比较两个操作数的标识,即使它们的类型不同。


关于代码,这部分:

element

...基本上说如果0的值完全等于1,则使用0,否则使用return total + (element === 0 ? 1 : 0);

所以采取整行:

total + 1

...如果element等于0,则函数的返回值为total + 0,否则返回值为if-else

您可以使用if( element === 0 ) { return total + 1; } else { return total + 0; } 语句重写代码:

{{1}}

答案 1 :(得分:4)

=====相同,但它不会转换变量

0 == '0' -> true
0 === '0' -> false

reduce不是内置函数,但它当然会对数组的每个元素运行计数器。

因此对于数组的每个元素,元素被检查为0,如果是,则增加总数。

答案 2 :(得分:3)

===是身份运算符,它类似于==,但不执行类型转换。

此函数似乎计算数组中的零数并返回计数。

  • 我假设reduce()的作用类似于Array.prototype.reduce

答案 3 :(得分:1)

===严格相等,双方必须属于同一类型且相等。这用于避免比较2个不相等的类型(通常是布尔值假和数字0)

答案 4 :(得分:1)

“===”表示“完全等于”,因为值与表格相同。所以...

var x = 5;
if (x === 5) {
    alert("This will happen");
} else {
    alert ("This won't");
}

它很少使用。

reduce函数可能是Array.prototype.reduce() method,它用于将函数顺序地应用于数组中的值(sort-of)。因此,在这种用法中,它将“计数器”函数应用于数组中的所有内容,这将计算数组中的零的数量并返回它。

答案 5 :(得分:0)

请参阅有关===的其他答案 减少它内置的JS功能,使用像“foreach”一样,它在阵列中的每个元素上移动 它以初始值开始,在你的情况下为零,然后调用counter()和第一个元素 它检查它,并返回总数(为零)+ 1如果元素为0,返回的值将是数组中第二个元素的“总数”等等....
总之:对数组的每个元素进行reduce调用,进行测试并将其值添加到(n-1)st元素的返回值中;

答案 6 :(得分:0)

这是一个非常好的问题,一般来自其他语言的开发人员总是难以理解使用===作为比较==

的重要性
   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.

在我的测试中,事实证明存在    实用性很差    ==和===之间的区别。而    严格的运算符是勉强的    在大多数浏览器中更快(大约10%)    与显式类型结合使用时    转换,例如=== + b,    只有真正的性能提升才会到来    从避免类型转换    完全。将字符串转换为    整数与另一个进行比较    整数明显变慢(向上    到10倍)比简单比较两个    整数。你永远不应该允许    要存储为字符串的整数    在内部,作为类型转换    将导致性能下降。

虽然这是数字的基本内容,但我确实在使用Firefox进行测试时发现了一个有趣的异常值。在Firefox中,当a是整数且b是字符串整数时,比较a === + b比等效a == b慢约20倍。这个结果对我来说似乎很可疑,并且在任何其他浏览器中都没有类似的结果。奇怪的是,当Firebug脚本调试器打开时,此结果会发生变化,并且=== + b比另一个快约10%。我不确定该结果是什么,但它确实提醒整数应该始终存储在数字中,而不是字符串中。

答案 7 :(得分:0)

===是严格的相等比较。 JavaScript does type coercion, which often has surprising results中的==运算符,就像' ' == false一样。因此,大多数JavaScript开发人员都尽可能使用===

很难讲述reduce()。这不是JavaScript中的内置全局函数,但可能引用了reduce() method on JavaScript arraysreduce()方法对数组中的每个元素执行一次counter(),并且每次调用counter()时,它将total替换为counter()的返回值。呼叫。因此,给定的函数将对array中严格等于零的元素进行计数。