從MDN的網站,如果你看一下typeof operand
防守力:操作數是代表我們所知道的對象或原始
即1===1 // returns true
這是一種最原始的boolean
表達式和
typeof true // always returns boolean
爲什麼typeof運算1 === 1返回錯誤,而不是布爾
但是當我運行下面的代碼
console.log(typeof 1===1);
我不明白爲什麼它返回false
,而不是boolean
從MDN的網站,如果你看一下typeof operand
防守力:操作數是代表我們所知道的對象或原始
即1===1 // returns true
這是一種最原始的boolean
表達式和
typeof true // always returns boolean
爲什麼typeof運算1 === 1返回錯誤,而不是布爾
但是當我運行下面的代碼
console.log(typeof 1===1);
我不明白爲什麼它返回false
,而不是boolean
typeof
操作者具有更高的優先級比===
,因此表達typeof 1===1
被解釋爲(typeof 1)===1
:
的typeof
操作者返回一個字符串; (typeof 1)
的計算結果爲字符串'number'
。
'number'===1
由於顯而易見的原因評估爲false
。
請參閱MDN atricle on operator precedence in Javascript。
作爲另一示例,通過類比,typeof 1+1
結果字符串'number1'
英寸
感謝您指出.... – nivas
由於typeof
運營商是以較高的優先級,然後===
:
typeof 1
它返回一個"number"
。"number" === 1
,返回false,因爲明顯是 a string
不是number
。如果你想它的工作,用括號內來處理比較(1 === 1)
第一和然後檢查它的類型。
console.log(typeof (1 === 1));
更多信息:MDN Operator precedence。
只是澄清一下,「Javascript從左到右讀代碼」有點誤導。這與運營商優先權有關,正如其他答案指出的那樣。顯然,'4 + 5 * 6'如預期的那樣返回'34',而不是'54'。 –
不,['typeof'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof)是一個運算符,就像'+'或'*'一樣。發生'typeof'的優先級高於'==='的優先級,所以它首先被執行。 '1 === typeof 1'會表現出相同的行爲。您可以查看MDN上的[運營商優先級頁面](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)以說服自己。 –
該表達式評估爲(typeof 1)===1
,歸因於運算符優先級。這不是true
。
嘗試使用
console.log(typeof (1 === 1));
你的'type'的比較字符串'1'。這不會是平等的,因爲'1'是一個數字。 –
typeof的優先級高於 – abhishekkannojia
,因爲「===」是該值的嚴格比較。 'typeof 1'是「數字」,所以你嚴格比較字符串值「數字」的數值1 –