gpt4 book ai didi

javascript - 为什么在 if 语句中使用双感叹号?

转载 作者:数据小太阳 更新时间:2023-10-29 03:51:00 30 4
gpt4 key购买 nike

我最近阅读了一些使用 !! 将变量转换为 bool 值以便在 if 语句中进行评估的代码。这对我来说似乎有点多余,因为无论如何都会评估变量的 bool 值。这样做有任何性能优势还是为了更好的浏览器支持?

示例代码:

var x = 0;
var atTop = x===window.scrollY;
if(!!atTop){
alert("At the top of the page.");
}

编辑:

对于非 bool 类型的操作数,我也看到过这种情况,但我一直认为使用 if 无论如何都会评估变量的 bool 值,因为 Javascript 中的所有值都是“真实的” "或 "虚假"。

示例代码:

var x = 1;//or any other value including null, undefined, some string, etc
if(!!x){//x is "truthy"
//wouldn't using if(x) be the same???
console.log("something...");
}

最佳答案

简答:不,没有理由。

在你的代码中,它已经是一个boolean类型,没有必要转换它,再转换回来,你总是得到相同的结果。实际上,如果您有任何 bool 值(truefalse),当您对它们中的任何一个使用 !! 时,它将被转换回它的初始值:

console.log(!!true); // Will be always "true"
console.log(typeof !!true); // It stills a "boolean" type
console.log(!!false); // Will be always "false"
console.log(typeof !!false); // It stills a "boolean" type

已编辑问题的答案:是的,是一样的。这就是 if(...) 的实际作用 - 它试图将任何类型转换为 boolean

这是一个小测试,你可以尝试一下并在 initialArr 数组中添加任何你想要的东西来测试,它与 if 的行为是否相同>!!:

const initialArr = [
undefined,
null,
true,
false,
0,
3,
-1,
+Infinity,
-Infinity,
Infinity,
'any',
'',
function() { return 1 },
{},
{ prop: 1 },
[],
[0],
[0, 1]
];

function testIsTheSame(arr) {
equolityCounter = 0;
arr.forEach(item => {
let ifStatement = false;
let doubleNotStatement = !!item;
if(item) {
ifStatement = true;
}

if(ifStatement === doubleNotStatement && typeof ifStatement === typeof doubleNotStatement) {
equolityCounter++;
}
});
console.log(`Is the same: ${equolityCounter === arr.length}`);
}

testIsTheSame(initialArr);

关于javascript - 为什么在 if 语句中使用双感叹号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52230490/

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