【问题标题】:Can I get explanation for (1 + undefined) implicitly Coercion weird behavior in JS? [duplicate]我可以解释 (1 + undefined) 隐式强制转换 JS 中的怪异行为吗? [复制]
【发布时间】:2019-10-12 10:19:18
【问题描述】:

我理解 javascript 中发生的隐式强制,但我实际上无法理解为什么会发生这种情况:

isNaN(1 + null)      // false
isNaN(1 + undefined) // true

据我所知,JS 将 null & undefined 转换为 0,或者我们可以说将它们视为 false 值。

这里有什么区别?

【问题讨论】:

    标签: javascript coercion type-coercion


    【解决方案1】:

    Javascript 将 null 转换为 0,但 undefined 转换为 NaN。 使用内置函数Number 进行检查。 所以在这种情况下,(1+ null) 类似于1+ 0,即1(1+ undefined)1 + NaN 相似,即NaN

    这就是它返回 true 的原因。

    console.log(Number(null));
    console.log(Number(undefined));

    这里的奇怪行为是 Javascript 在处理比较运算符或作为 if 语句中的条件时将这两种类型都视为“假”,而假值在隐式强制后被视为 0...

    结论:Js coerce undefined & null视情况而定。如果它处于状态,它会尝试将其转换为布尔值false &如果它处于算术运算中,它会尝试将其转换为数字,在这种情况下它们之间会有区别:

    未定义 ==> NaN

    null ==> 0

    【讨论】:

    • 你为什么要问你是否已经有了答案?
    • 根据上下文强制不同的值当然是正确的。如果您执行if(x),则x 的值将转换为布尔值。 a + b 有一个是数字,则期望另一个是数字。同样,如果一个是字符串,另一个将被转换为字符串。
    • @connexo 可能是为了与世界分享知识。 Self-answers are fine and actually encouraged.
    • 可以在堆栈@connexo 中回答自己的问题
    猜你喜欢
    • 2020-06-27
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多