我通过艰苦的方式发现在JavaScript中,对布尔类型进行位运算符操作不会返回布尔类型。我以为这可能是一个错误,但我查看了ECMAScript规范,确实指出位运算符返回数字而不是布尔型。它没有提到在使用布尔值时会出现什么奇怪的结果。为什么要这样做?我在其他语言中使用这种技术已有多年,所以我完全不知道为什么在JavaScript中它会产生不同的效果。 有任何想法吗?这只是因为除了我之外没有人会以这种方式使用位运算符,还是有技术上的原因?我无法想象检查类型并返回布尔类型会很困难。
以下代码供参考:
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'
编辑:
应要求,我已经在C、C ++中使用过这个功能,我很确定也可以在PHP中使用,尽管我不能保证。是的,我意识到C / C ++是类型化的,因此内部会有所不同。我只是想知道为什么JavaScript的行为会不同。
应要求,这里是我通常如何使用| =的示例
var foundLowest = false;
for(var k = 0; k < someLength; ++k) {
foundLowest |= someFunctionThatReturnsTF(k);
}
if(foundLowest === true) {
/* do stuff */
}
|
或&
的实际用例示例? - Matías Fidemraizer|=
的语言是什么? - T.J. Crowdertrue | false
,结果是true
,但最终如果我想知道左边或右边哪个是true
,我会使用||
(逻辑或)而不是|
。 - Matías Fidemraizer