【问题标题】:Why does typeof 3>2 return false in javascript console? [closed]为什么 typeof 3>2 在 JavaScript 控制台中返回 false? [关闭]
【发布时间】:2015-01-21 15:31:08
【问题描述】:

以下链接提供了有关 typeof 工作原理的描述和示例: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof

【问题讨论】:

  • 你希望它做什么?
  • 找不到什么解释?请将问题放在帖子正文中,标题应表明您要询问的主题。

标签: javascript typeof


【解决方案1】:

为了解释发生了什么,解释器将其视为:

(typeof 3) > 2

typeof 运算符总是返回一个字符串,3 是一个数字,因此表达式解析为:

'number' > 2

Greater-than Operator ( > ) 应用Abstract Relational Comparison Algorithm 来获得比较结果。由于 'number' 是一个字符串,它使用内部 ToNumber 操作(步骤 3a)转换为一个数字。不包含数字文字(例如“3”)的字符串会导致 NaN(请参阅下面的注释),因此现在表达式为:

NaN > 2

步骤 3c 表示如果左侧表达式是 NaN,则返回 undefined(即特殊的 undefined value,而不是字符串 'undefined')。

所以返回undefined大于运算符算法的第6步说:

如果 [结果] 未定义,则返回 false。否则,返回[结果]。

所以最终,表达式返回 false

注意:仅包含空格(一个或多个空格、制表符、换行符等)的字符串转换为数字 0,这是唯一不包含空格的字符串的情况数字文字转换为 NaN 以外的数值。见ToNumber Applied to the String Type

【讨论】:

  • "undefined 是如何转换为 false 的?"很有趣!
【解决方案2】:

在 JavaScript 中,运算符“typeof”的优先级为 4,而运算符“>”的优先级为 8,因此根据问题中提到的示例 typeof 3 首先被评估,然后与返回的 2 进行比较假的。

有关运算符的优先级和关联性的更多详细信息,请访问:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

【讨论】:

    【解决方案3】:

    因为typeof 3 不超过2

    你需要括号。

    【讨论】:

    • 这并不能解释为什么结果是假的。
    猜你喜欢
    • 2019-01-09
    • 2023-01-16
    • 2018-01-31
    • 1970-01-01
    • 2023-03-10
    • 2023-03-28
    • 2020-08-04
    • 2019-12-07
    • 2011-04-16
    相关资源
    最近更新 更多