Pet*_*owe 6 javascript types boolean-logic
在JavaScript中,似乎:
(4294958077 | 0) == -9219
Run Code Online (Sandbox Code Playgroud)
为什么不是4294958077?
它表明存在某种溢出(虽然我理解它的JavaScript数字类型的范围是+/- 9007199254740992,所以这本身就是奇怪的.)
即使它是溢出,肯定
(4294958077 | 0) == 4294958077
Run Code Online (Sandbox Code Playgroud)
应该评价为真 - 但事实并非如此.
请帮忙
它与浮点类型或溢出无关.它返回-9219,因为标准要求它,因为所有二进制按位操作都必须使用带符号的 32位整数(ECMA-262§11.10)完成.
生产A:A @ B,其中@是上述产品中的一个按位运算符,评估如下:
- 让lref成为评估A的结果.
- 设lval为GetValue(lref).
- 设rref是评估B的结果.
- 设rval为GetValue(rref).
- 让lnum成为ToInt32(lval).
- 让rnum为ToInt32(rval).
- 返回将按位运算符@应用于lnum和rnum的结果.结果是带符号的32位整数.
4294958077转换为带符号的32位整数(使用ECMA-262§9.5中的算法)是-9219,而0仍然是0,所以按位 - 或将返回-9219.