了解 JavaScript 提升和truthy &虚假的

发布于 2024-11-25 10:28:56 字数 1415 浏览 1 评论 0原文

我之前读过有关 JavaScript 提升的内容。

Ben Cherry 的 JavaScript 作用域和提升
德米特里·索什尼科夫关于“提升”的两句话

以及一些有关 JavaScript 类型强制、真相和事实的更多信息错误测试: 其他一些资源

真相、平等和 JavaScript以及 在练习一些时,发现我缺少一些关于提升和变量“truthy &”的重要概念。虚假的。

进行“if”真值测试

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

} 
bar();

1:使用重复变量声明o/p

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

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

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

} 
bar();

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

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

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

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

请有人澄清。谢谢

I've been reading about JavaScript hoisting sometime back.

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

and, some more about JavaScript type-coercion, truth & false test:
Truth, Equality and JavaScript and some other resource

And while practicing some, and found I m missing some important concept about the hoisting and a variable' truthy & falsy.

1: 'if' truth test with duplicate variable declaration

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

} 
bar();

o/p: inside if

Doubt: 'foo' value being '1', if(!foo) should evaluates to false and that block should not be executed (quoting from above resources: hoisting affects only the var & function declaration, but not the execution). But why is that alert is shown.
This is not the case if I directly use false (shown in the below no-tricks code: snippet #3)

2: 'if' truth test without duplicate variable declaration

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

} 
bar();

o/p: no output; means control not entered 'if' block
This is what one could expect

3: 'if' using 'false' with duplicate variable declaration

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

o/p: no output; means control not entered 'if' block
This is what one could expect

Someone please clarify. Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

抠脚大汉 2024-12-02 10:28:56

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


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

} 
bar();

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

For your example number 1, the alert is shown because you're using var inside the function and the var declaration is hoisted to the top of the function, so it is equivalent to:


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

} 
bar();

One might conclude that these sorts of issues offer compelling reason to declare all variables explicitly at the top of the function.

久而酒知 2024-12-02 10:28:56

仅急切评估变量声明。第一种情况(在 if 块中)中的变量赋值仅在进入 if 块时发生。

您仅声明但未分配任何值的变量的值为未定义(强制为false)。

Only variable declaration is eagerly evaluated. The variable assignment in your first case (in the if block) occurs only upon entering the if block.

The variable you only declare, but not assign any value to, has the value of undefined (which coerces to false).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文