JavaScript按位未定义的陷阱?

CoR*_*CoR 5 javascript bit-manipulation undefined undefined-behavior

未定义的按位运算符的逻辑是什么?

var x;
console.log(x);     // undefined
console.log(x^7);   // 7
console.log(7^x);   // 7
console.log(x|7);   // 7
console.log(7|x);   // 7
console.log(7&x);   // 0
console.log(x&7);   // 0
console.log(~x);    // -1
console.log(x*2);   // NaN
console.log(x/2);   // NaN
console.log(x+2);   // NaN
console.log(x-2);   // NaN
Run Code Online (Sandbox Code Playgroud)

我可以在NaN看到一些感觉.因为未定义-2实际上'不是数字'.但我没有遵循任何关于按位运算符和未定义的逻辑.

use*_*674 6

所有按位运算符的所有操作数[ToInt32]调用内部函数.

请注意,ToInt32(undefined) -> 0范围是[0, 2^32)