【问题标题】:Bitwise operations on non numbers非数字的按位运算
【发布时间】:2012-06-17 18:20:44
【问题描述】:

不知何故,JavaScript 可以理解 bitwise operationsNaN ^ 1Infinity ^ 1 甚至 'a' ^ 1(全部计算为 1)。

管理非数字的位运算符的规则是什么?为什么上面所有的例子都评估为1

【问题讨论】:

    标签: javascript operators bit-manipulation


    【解决方案1】:

    根据ES5 spec,在做bitwise operations时,所有操作数都转换为ToInt32(先调用ToNumber,如果值为NaNInfinity,则转换为0 )。

    因此:NaN ^ 1 => 0 XOR 1 => 1

    【讨论】:

    • 那些规格..... +1 我还以为是function bitwise(obj){ if (typeof o !== "Number") return 1; }
    • @gdoron:一定会喜欢这个规范:-P
    • 如果他们给我你的代表,我会的。 :) 值得一提的是,结果取决于第二个操作数。示例:"A" ^ 2 === 2 // true
    • 为了完整起见,任何非数字文字字符串都是NaN然后"a" ^ 1 = 1
    • @亚历山大。几乎,任何非数字(所有其他类型,如对象和数组)都评估为 NaN。 /fndsjkn/ ^ 1 == 1
    【解决方案2】:

    ECMA-262 在 11.10 中定义二进制位运算符的参数使用 ToInt32 进行转换。解释 ToInt32 的 9.5 在其前两点中说:

    1. 令 number 为对输入参数调用 ToNumber 的结果。
    2. 如果数字是 NaN、+0、-0、+Inf 或 -Inf,则返回 +0。

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 2020-01-09
      • 1970-01-01
      • 2011-04-24
      相关资源
      最近更新 更多