首页 > 解决方案 > javascript中未定义如何转换为二进制?

问题描述

undefinedjavascript中的二进制如何处理?当我这样做时它会引发错误(undefined).toString(2)

但是当我这样做时

undefined & 0 //returns 0 
undefined & 1 //returns 0 
undefined | 0 //returns 0 
undefined | 1 //returns 1

有人可能会猜测undefined可能会转换为 0 。或者还有其他事情发生吗?

标签: javascriptbinaryundefinedbitwise-operators

解决方案


有点儿。当使用按位运算符(以及仅在数学方面有意义的其他运算符 - 例如-and***)时,两个表达式都首先转换为数字

4. Let lnum be ? ToNumeric(lval).
5. Let rnum be ? ToNumeric(rval).

做到ToNumeric ToNumber

Argument Type   Result
Undefined       Return NaN.

然后二元运算符调用 ToInt32每个运算符,它有

  1. 如果 number 为 NaN、+0、-0、+∞ 或 -∞,则返回 +0。

因此,它们被有效地转换为 NaN 以准备数学运算,然后将 NaN 转换为 0 以进行二进制运算。

(undefined).toString(2)不起作用,因为访问表达式的属性(如toString)仅在表达式是对象或可以包装在对象中的原语时才有效。undefined 和 null 不是对象,也不能转换为一个对象,因此尝试访问它们的任何属性都会抛出异常。


推荐阅读