为什么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
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,因为明显是 astring
不是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 –