bool의 비트 연산자가 JavaScript에서 bool을 반환하지 않는다는 것을 알게되었습니다. 나는 그것이 버그 일 것임에 틀림 없다고 생각했다. 그러나 나는 ECMAScript spec에서 그것을 조사했다. 그리고 확실히, 그것은 비트 연산자가 bool이 아니라 숫자를 반환한다고 말한다. 부울 값으로 사용할 때 발생하는 별난에 대한 말은하지 않습니다. 왜 그렇게 된거야? 나는이 기술을 다른 언어로 수년간 사용해 왔기 때문에 JavaScript에서 다른 점이 왜 그렇게 당황 스럽습니까? 어떤 아이디어? 아무도 이런 방식으로 비트 연산자를 사용하지 않았기 때문에 (아니면 나를 제외하고) 기술적 인 이유가 있습니까? 형식을 확인하고 부울을 반환하는 것이 어려울 것이라고 상상할 수 없습니다.JavaScript : 부울 값의 비트 OR이 부울 대신 숫자를 반환하는 이유는 무엇입니까?
참고로, 다음 코드
var found = false;
console.log(found, typeof(found));
found |= true;
console.log(found, typeof(found));
found = true;
console.log(found, typeof(found));
다음 출력을 생성
false 'boolean'
1 'number'
true 'boolean'
편집 :
요청에 의해, I는 C 이것을 사용한, C++, 나는 PHP에 대해 맹세하지는 않을 것이지만 꽤 확신합니다. 예, C/C++에 형식이 지정되어 있으므로 내부적으로 다를 수 있습니다. JavaScript가 왜 다르게 동작하는지 궁금 할뿐입니다. 요청에 의해
, 나는 일반적으로 사용하는 것이 방법의 예 | 그들을을 지정할 수의 비트 연산자는 (항상 숫자에 피연산자로 변환) 일관되게 행동 갖는 =
var foundLowest = false;
for(var k = 0; k < someLength; ++k) {
foundLowest |= someFunctionThatReturnsTF(k);
}
if(foundLowest === true) {
/* do stuff */
}
당신은'의 실제 사용 사례의 일부 샘플을 추가 할 수 있습니까? –
그 점에 관해서는 당신이 말하고있는 것은 어떤 언어입니까? 부울을 사용하여'| ='를 지원합니까? –
나는 부울 값에 대해서조차 항상 숫자 값을 반환하는 비트 연산을한다고 상상할 수 있습니다. 후드 아래에서 고려하면 수치 자체와 동일시됩니다. boolean 반환 값을 기대하는 이유는 무엇입니까? –