对非数字的按位运算

Bitwise operations on non numbers

本文关键字:运算 数字      更新时间:2023-09-26

不知何故,JavaScript 可以理解按位运算NaN ^ 1Infinity ^ 1甚至'a' ^ 1(都计算为 1)。

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

根据 ES5 规范,在执行按位运算时,所有操作数都转换为 ToInt32(首先调用 ToNumber 。如果值为 NaNInfinity ,则转换为 0 )。

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

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

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