查看下面的代码,我不明白(类型为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时它会出错?那是我的困惑
答案 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 !== 'undefined
,a
在IIFE之外未定义/未声明,则typeof a
返回"未定义"在不等式测试中与自身相比,返回false。
在没有' typeof`的情况下进行测试时,您会收到参考错误。