我只是在瀏覽Mozilla開發者文檔,發現表示我不知道用於什麼,也無法通過互聯網找到任何信息。「>>>」運算符 - 用於什麼?
Array filter polyfill - line 10
var t = Object(this);
var len = t.length >>> 0;
任何建議,這是什麼運營商是?
我只是在瀏覽Mozilla開發者文檔,發現表示我不知道用於什麼,也無法通過互聯網找到任何信息。「>>>」運算符 - 用於什麼?
Array filter polyfill - line 10
var t = Object(this);
var len = t.length >>> 0;
任何建議,這是什麼運營商是?
TL; DR
t.length >>> 0;
實際上是嘗試從t.length
獲得一個有效的32位無符號整數。我們知道,t.length
可以是任何類型(對象,數組,字符串等)。如果它已經是一個有效的32位無符號數,則>>> 0
返回值不變。例如,
console.log({} >>> 0);
// 0
console.log([] >>> 0);
// 0
console.log("Google" >>> 0);
// 0
通常情況下,按位伎倆來避免if
塊類型檢查,這樣
var len = 0;
if (typeof data === 'number') {
len = data;
}
我們可能還是要len
轉換爲整數,如果它是浮動點值。
說明
>>>
被稱爲填零右移位運算符。除用作位運算符外,還用於從對象中獲取32位數值。該ECMA Script 5.1 Specification for >>>
說
- 讓LREF是評估ShiftExpression的結果。
- 讓lval成爲GetValue(lref)。
- 讓rref是評估結果添加劑表達。
- 讓rval成爲GetValue(rref)。
- 讓lnum是ToUint32(lval)。
- 讓rnum是ToUint32(rval)。
- 讓shiftCount轉換是屏蔽掉所有的結果,但RNUM的至少顯著5位,也就是計算RNUM & 0x1F的。
- 返回執行零填充右移的結果lnumshiftCount位。空位填充零。 結果是一個無符號的32位整數。
它基本上轉換兩個操作數以32位無符號整數(步驟5和6)和轉移的左手側表達,右手側表達倍。
如果我們看一下definition of ToInt32
,
- 讓數是調用ToNumber對輸入參數的結果。
- 如果數字是NaN,+ 0,-0,+∞或-∞,則返回+0。
- 讓POSINT是符號(數)*地板(ABS(數))。
- 讓int32bit是POSINT模2 ;即,有限整數值數字類型的ķ用正號和小於2 在幅度使得POSINT和ķ數學差是數學上的2 的整數倍。
- 返回int32bit。
首先參數被轉換爲一個數字(如果它是一個不是有效的數字然後NaN
將由ToNumber
被返回)。第4步確保您返回的範圍爲0到2的有效數字。
這是一個"Zero-fill right shift"(按位)運算符。
該運算符將第一個操作數向右移動指定的位數。向右移位的過多位被丟棄。零位從左側移入。符號位變成
0
,所以結果總是非負的。對於非負數,零填充右移和符號傳播右移產生相同的結果。例如,
9 >>> 2
收益率爲2
,與9 >> 2
相同:但是,負數不是這種情況。例如,
-9 >>> 2
1073741821
產生,這比-9 >> 2
不同(其產生-3
):
它是[按位運算符](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators)。 – Danny