为什么typeof运算1 === 1返回错误,而不是布尔

问题描述:

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 –

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

由于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)以说服自己。 –

该表达式评估为(typeof 1)===1,归因于运算符优先级。这不是true

尝试使用

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