給下面的代碼片段的Javascript ===(三聯等於)
function countZeroes(array) {
function counter(total, element) {
return total + (element === 0 ? 1 : 0);
}
return reduce(counter, 0, array);
}
- 什麼是===嗎?
- 是
reduce
內置函數嗎?它有什麼作用? - 請解釋這個程序的步驟。
給下面的代碼片段的Javascript ===(三聯等於)
function countZeroes(array) {
function counter(total, element) {
return total + (element === 0 ? 1 : 0);
}
return reduce(counter, 0, array);
}
reduce
內置函數嗎?它有什麼作用?這是嚴格的平等運算符。
它比較兩個值並根據Strict Equality Comparison Algorithm檢查它們是否相同。
這與==
相反,如果它們是不同的類型,它將試圖強制要比較的值中的一個或兩個值。那個使用Absract Equality Comparison Algorithm。
抽象算法的規則可能會很棘手。除非您特別需要==
,否則最好使用===
。
標準相等運算符(==和!=)比較兩個操作數,而不考慮其類型。嚴格相等運算符(===和!==)對相同類型的操作數執行相等比較。如果操作數必須具有特定的類型和值,或者操作數的確切類型非常重要,請使用嚴格的相等運算符。否則,使用標準的相等運算符,它們允許您比較兩個操作數的標識,即使它們不是相同的類型。
關於代碼,這部分:
(element === 0 ? 1 : 0)
...基本上說,如果的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;
}
===
相同==
只是它不投變量
0 == '0' -> true
0 === '0' -> false
減少是不是一個在功能上建的,但它的確是在陣列中的每個元素背道而馳的。
因此對於數組中的每個元素,元素被檢查爲0
,並且如果它是總數遞增。
===是運營商的身份,這就像==,但不執行類型轉換。
此函數似乎計算數組中零的個數並返回計數。
===是嚴格等於,雙方必須是相同的類型和是相等的。這用於避免2種不同類型的比較(通常爲布爾值假和數字0)
查看關於===的其他答案。
減少它建立在像「foreach」一樣使用的JS函數中,它在數組中的每一個元素上移動。
它以inital值開始,在你的情況下它的值爲零,然後調用counter()和第一個元素。
它檢查它,並返回總數(這是零)+ 1,如果元素爲0,返回的值將爲數組中的第二個元素的「總數」,依此類推......
:reduce調用來對數組中的每個元素進行計數,進行測試並將其值添加到(n-1)st元素的返回值;
「===」的意思是「完全相等」,因爲在該值是相同的,因爲是類型。所以...
var x = 5;
if (x === 5) {
alert("This will happen");
} else {
alert ("This won't");
}
它很少使用。
reduce函數可能是Array.prototype.reduce() method,它用於按順序將一個函數應用於數組中的值(排序)。因此,在這種用法中,它將'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.
在我的測試事實證明出有 小實際表現 區別==和===。而 嚴格操作者是略微 更快(約10%)在大多數瀏覽器 當使用顯式 類型轉換相結合,諸如=== + B中, 只有真正的性能收益將從避免類型轉換 完全來 。將字符串轉換爲 整數以便與另一個 整數進行比較的整數比簡單比較兩個整數的整數要慢得多(將 提高到10x)。您絕不應允許 整數在內部作爲字符串 存儲,因爲類型轉換 將導致性能損失。
雖然這是數字的基本要點,但我在使用Firefox進行測試時確實找到了一個有趣的異常值。在Firefox中,當a是整數且b是字符串整數時,比較a === + b比等效的a == b慢大約20倍。這個結果對我來說似乎是可疑的,在其他任何瀏覽器中都沒有出現過類似的情況。奇怪的是,當Firebug腳本調試器被打開時,這個結果會發生變化,並且一個=== + b比另一個快約10%。我不知道該如何處理這個結果,但它確實提示整數應該總是以數字形式存儲,而不是以字符串形式存儲。
相關http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter-which-equal-operator-i-use/359509#359509 – phwd 2011-02-25 02:29:01
==如果您不知道,可能會很危險你可能得到的一些結果。看到一堆奇怪的例子看到這個答案:http://stackoverflow.com/a/38856418/984780 – 2017-03-20 18:42:59