【发布时间】:2015-02-19 09:43:28
【问题描述】:
我发现布尔值的位运算符在 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 */
}
【问题讨论】:
-
您能否在布尔值上添加一些
|或&的真实用例示例? -
就此而言,您说的是哪种语言支持带有布尔值的
|=? -
我想按位运算总是返回数值,即使是布尔值;考虑到它们本身等同于数字。为什么你会期望一个布尔返回值?
-
我不明白你什么时候会在布尔值上使用位运算符。如果你做
true | false它是true,最后如果我想知道左边还是右边部分是true,我会使用||(逻辑或)而不是| -
很高兴看到有人实际检查规范!
标签: javascript numbers boolean