理解JavaScript提升和truthy&falsy

man*_*nta 5 javascript type-coercion truthiness hoisting

我一直在阅读有关JavaScript吊装的消息.

Ben Cherry的JavaScript范围和吊装
Dmitry Soshnikov关于"吊装"的两个词

而且,更多关于JavaScript类型强制,真假测试: 真理,平等和JavaScript以及其他一些资源

在练习一些时,发现我遗漏了一些关于吊装的重要概念和一个变量'truthy&falsy.

1:'if'真实测试,带有重复变量声明

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

} 
bar();
Run Code Online (Sandbox Code Playgroud)

O/P: inside if

怀疑: 'foo'值为'1',if(!foo)应该评估false并且不应该执行该块(引用来自上面的资源:提升仅影响var&function声明,但不影响执行).但为什么会显示该警报.如果我直接使用就不是这种情况false(如下面的no-tricks代码所示:代码片段#3)

2:'如果'真值测试没有重复变量声明

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

} 
bar();
Run Code Online (Sandbox Code Playgroud)

o/p:没有输出; 意味着控制没有进入'如果'块
这是人们可以期待的

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

var foo = 1; 
function bar() { 
    if (false) { 
        alert('inside if');
        var foo = 10; 
    } 
} 
bar();
Run Code Online (Sandbox Code Playgroud)

o/p:没有输出; 意味着控制没有进入'如果'块
这是人们可以期待的

有人请澄清一下.谢谢

use*_*716 8

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


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

} 
bar();
Run Code Online (Sandbox Code Playgroud)

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

  • 我的错.我根本不介意这个功能.我只专注于类型强制和吊装(它们在我脑海中旋转).如果重复声明不在函数内,那么即使在第二个声明之后,'foo'也将具有前一个值(1).这一切都让我错过了所使用的功能.谢谢你的开眼界:) (2认同)