【问题标题】:Why typeof 1===1 returns false instead of boolean [duplicate]为什么 typeof 1===1 返回 false 而不是 boolean [重复]
【发布时间】:2017-03-16 13:35:38
【问题描述】:

如果您查看typeof operand,来自MDN 网站
Def: 操作数是表示对象或原语的表达式
我们知道1===1 // returns true是一个原始类型boolean
typeof true // always returns boolean

但是当我在代码下面运行时

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

我不明白为什么它返回 false 而不是 boolean

【问题讨论】:

  • 您正在将type 的字符串与1 进行比较。这永远不会相等,因为1number
  • typeof 优先于比较
  • 因为===是对值的严格比较。 typeof 1 是“数字”,因此您将字符串值“数字”与数值 1 进行严格比较
  • @Kinduser 对此感到抱歉,我这样做是因为 Alex 首先回答它与运算符优先级有关,然后您修改了 Vincent 指出的答案

标签: javascript


【解决方案1】:

由于typeof 运算符的优先级高于===

  • 第一个操作实际上是typeof 1,它返回一个"number"
  • 下一个操作是"number" === 1,它返回false,因为显然string不是number

如果你想让它工作,在里面使用括号来处理比较(1 === 1)首先然后然后检查它的类型。

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

更多信息MDN Operator precedence

【讨论】:

  • 为了澄清,“Javascript 从左到右读取代码”有点误导。正如其他答案指出的那样,这与运算符优先级有关。显然,4 + 5 * 6 按预期返回 34 而不是 54
  • 不,typeof 是一个运算符,就像+* 一样。恰好typeof的优先级高于===,所以先执行。 1 === typeof 1 会表现出相同的行为。你可以看看MDN上的Operator precedence page来说服自己。
【解决方案2】:

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'

【讨论】:

  • 感谢指出......
【解决方案3】:

由于运算符优先级,表达式被评估为(typeof 1)===1。那不是true

【讨论】:

    【解决方案4】:

    尝试使用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 2013-06-26
      相关资源
      最近更新 更多