gpt4 book ai didi

JavaScript:为什么 boolean 值的按位或返回数字而不是 boolean 值?

转载 作者:数据小太阳 更新时间:2023-10-29 06:11:22 24 4
gpt4 key购买 nike

我发现 boolean 值的按位运算符在 JavaScript 中不返回 boolean 值是很困难的。我认为这一定是一个错误,但我在 ECMAScript 规范中进行了查找,果然,它说按位运算符返回数字,而不是 boolean 值。当您将它们用于 boolean 值时,它不会说出奇怪的结果。为什么这样做呢?我已经在其他语言中使用这种技术多年,所以我完全不明白为什么它在 JavaScript 中做了一些不同的事情。有任何想法吗?仅仅是因为没有人以这种方式使用过按位运算符(我除外),还是有技术原因?我无法想象检查类型并返回 boolean 值会很困难。

供引用,以下代码:

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 */
}

最佳答案

让按位运算符的行为保持一致(始终将它们的操作数转换为数字)似乎是按原样指定它们的充分理由。几年前在 es-discuss 列表上讨论过添加 ||= 和类似的速记运算符,但 Eich & Co 对添加此类内容非常保守,我似乎记得当时的评论它“没有发挥其句法重要性”的台词。 :-)

请注意,因为 JavaScript 乐于将任何值强制转换为 boolean 值,您可以愉快地使用当前样式并让它仍然有效,因为 true 强制转换为 1强制为 truefalse 强制为 0,后者强制为 false。例如:

var a = false;

a |= true;
// Even though `a` is now `1`, it works just fine
if (a) {
snippet.log(a + " => if branch"); // Does this one
} else {
snippet.log(a + " => else branch");
}

a &= false;
// Even though `a` is now `0`, it works just fine
if (a) {
snippet.log(a + " => if branch");
} else {
snippet.log(a + " => else branch"); // Does this one
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

关于JavaScript:为什么 boolean 值的按位或返回数字而不是 boolean 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com