gpt4 book ai didi

javascript - 理解 JavaScript 提升和 truthy & falsy

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

我之前一直在阅读有关 JavaScript 提升的内容。

JavaScript Scoping and Hoisting by Ben Cherry
Two words about “hoisting” by Dmitry Soshnikov

还有一些关于 JavaScript 类型强制、真假测试的更多信息: Truth, Equality and JavaScript和一些其他资源

在练习一些时,我发现我遗漏了一些关于提升和变量“真值和假值”的重要概念。

1: 'if' 真值测试与重复变量声明

var foo = 1; 
function bar() {
if (!foo) {
alert('inside if');
var foo = 10;
}

}
bar();

o/p: inside if

疑问:“foo”值为“1”,if(!foo) 的计算结果应为 false,而该 block 不应为已执行(引用上述资源:提升仅影响 varfunction 声明,但不影响执行)。但是为什么会显示该警报。如果我直接使用 false(如以下无技巧代码所示:片段 #3),情况就不同了

2:没有重复变量声明的“if”真值测试

var foo = 1; 
function bar() {
if (!foo) {
alert('inside if');
}

}
bar();

o/p:无输出;表示控件未进入“if” block
这是人们所期待的

3: 'if' 使用带有重复变量声明的 'false'

var foo = 1; 
function bar() {
if (false) {
alert('inside if');
var foo = 10;
}
}
bar();

o/p:无输出;表示控件未进入“if” block
这是人们所期待的

有人请澄清。谢谢

最佳答案

对于您的示例 1,显示警报是因为您在函数内部使用 var 并且 var 声明被提升到函数的顶部,所以它相当于:


var foo = 1; 
function bar() {
var foo;
if (!foo) {
alert('inside if');
foo = 10;
}

}
bar();

人们可能会得出结论,这些问题提供了令人信服的理由,可以在函数顶部显式声明所有变量。

关于javascript - 理解 JavaScript 提升和 truthy & falsy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6766044/

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