5

undefined에서 비트 연산자의 논리는 무엇입니까 ???JavaScript 비트 단위 정의되지 않은 함정?

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 

나는 NaN에서 어떤 감각을 볼 수 있습니다. undefined -2는 실제로 '숫자가 아닙니다.' 그러나 나는 비트 연산자에 대한 논리를 따르지 않으며 정의되지 않는다.

+2

비트 연산은 정수에 의미를, 그래서 인수가 자동으로 해당 유형 강제 변환되는

참고. – Barmar

+0

예, 나는 그것이 의미있는 오류나 뭔가를 던질 것으로 예상했습니다. 그 침묵하는 강제는 나의 코드에서 무한 루프를 만들었다. – CoR

답변

6

내부 기능 [ToInt32]는 모든 비트 운영자 모든 피연산자에 대해 호출된다. ToInt32(undefined) -> 0 및 범위 [0, 2^32)