这个Javascript代码段如何打印' false&#39 ;?

时间:2017-01-05 19:51:31

标签: javascript

查看下面的代码,我不明白(类型为a = =' undefined')是如何工作的。我理解变量" a"不在IIFE内部,因此在它之外是未定义的。但我不明白代码是如何打印出来的' false'

(function(){
   var a = 3;   
})();

console.log("a defined? " + (typeof a !== 'undefined'));
//prints false- but how and why?

如果我删除typeof并执行

console.log("a defined? " + (typeof a !== 'undefined')); 
Uncaught ReferenceError: a is not defined

我收到一条错误,说明未捕获的ReferenceError:a未定义。那么当typeof存在时它如何正常运行 - 并且当删除typeof时它会出错?那是我的困惑

2 个答案:

答案 0 :(得分:4)

如你所说,IFFE之外不存在a。因此,在不同的范围内未定义。

//Enter the following in your console.
typeof a   // --> "undefined"

(function(){
   var a = 3;   
})();

typeof a   // --> "undefined" (Still)

当您检查类型时可能会出现问题,并且可能会误解布尔评估(这是一种双重否定)。 typeof a === 'undefined'true,因此typeof a !== 'undefined'false

答案 1 :(得分:0)

首先,帖子是否存在" typeof"互换 - 它应该插入第一个例子中,然后在第二个例子中删除。但无论如何。

  

那么当typeof存在时它运行良好怎么样 - 当删除typeof时它会出错?

答案在于typeof运营商的性质和设计。

无论是否处于严格模式,读取未声明变量的值以获取其值都会生成"参考错误:a未定义" 除了使用typeof运算符

typeof运算符旨在允许测试未声明的变量,如果尚未声明,则返回原始值undefined。没有其他方法可以在没有错误的情况下执行此测试。

如果没有清楚地理解测试的原因,测试结果仍然不明确:值为undefined的声明变量的类型也返回" undefined"。

所以在第一个(?)示例中,如果您测试typeof a !== 'undefineda在IIFE之外未定义/未声明,则typeof a返回"未定义"在不等式测试中与自身相比,返回false。

在没有' typeof`的情况下进行测试时,您会收到参考错误。