我正在阅读有关let
个关键字的信息并完成了此代码块:
typeof
与Temporal Dead Zone(TDZ)变量的行为不同于未声明(或声明!)变量的行为。例如:
{
// `a` is not declared
if (typeof a === "undefined") {
console.log( "cool" );
}
// `b` is declared, but in its TDZ
if (typeof b === "undefined") { // ReferenceError!
// ..
}
// ..
let b;
}
那么如何检查typeof
,因为它总会给出ReferenceError?
我们是否需要使用try ... catch
块作为typeof
的替代?
{
try {
console.log(typeof(b));
} catch (e) {
console.log(e);
}
let b;
}
答案 0 :(得分:2)
那么怎么能检查它的
typeof
,因为它总会给出ReferenceError?
你做不到。在声明它们之前访问变量是一个编程错误。
答案 1 :(得分:0)
最好的做法是将变量声明为我们首先使用它或在顶部声明
let b;
if (typeof b === "undefined") { //No ReferenceError!
// ..
}
所以,最好从TDZ中删除。
答案 2 :(得分:0)
来自文档:
在ECMAScript 2015中,让我们将变量提升到块的顶部。 但是,在变量声明之前引用块中的变量会导致
ReferenceError
。变量位于"暂时死区"从块的开始直到处理声明。
因此,在您的代码中,您尝试访问尚未声明的var。