2017-03-16 115 views
15

MDN的網站,如果你看一下typeof operand
防守力:操作數是代表我們所知道的對象或原始
1===1 // returns true這是一種最原始的boolean表達式和
typeof true // always returns boolean爲什麼typeof運算1 === 1返回錯誤,而不是布爾

但是當我運行下面的代碼

console.log(typeof 1===1);

我不明白爲什麼它返回false,而不是boolean

+0

你的'type'的比較字符串'1'。這不會是平等的,因爲'1'是一個數字。 –

+2

typeof的優先級高於 – abhishekkannojia

+0

,因爲「===」是該值的嚴格比較。 'typeof 1'是「數字」,所以你嚴格比較字符串值「數字」的數值1 –

回答

16

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'英寸

+0

感謝您指出.... – nivas

38

由於typeof運營商是以較高的優先級,然後===

  • 的第一個操作實際上是typeof 1它返回一個"number"
  • 接下來的操作是"number" === 1,返回false,因爲明顯是 a string不是number

如果你想它的工作,用括號內來處理比較(1 === 1)第一然後檢查它的類型。

console.log(typeof (1 === 1));

更多信息MDN Operator precedence

+3

只是澄清一下,「Javascript從左到右讀代碼」有點誤導。這與運營商優先權有關,正如其他答案指出的那樣。顯然,'4 + 5 * 6'如預期的那樣返回'34',而不是'54'。 –

+7

不,['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)以說服自己。 –

6

該表達式評估爲(typeof 1)===1,歸因於運算符優先級。這不是true

4

嘗試使用

console.log(typeof (1 === 1));