繁体   English   中英

检查typeOf未定义不起作用?

[英]Check for typeOf undefined not working?

有人可以解释为什么这行不通吗?

setOrientation: function() {
    if (typeof oldOrientation !== 'undefined') console.log(oldOrientation);
    let oldOrientation = orientation;
    //other code
}

抛出oldOrientation is undefined 我最终只是简单地删除了let ,它开始起作用,但是我很难完全理解为什么。 我认为这与范围界定有关吗?

我通过在全局范围内声明oldOrientation解决此问题,我只想了解为什么对typeof的比较不能按oldOrientation进行。

从MDN let

在ECMAScript 2015中,let绑定不受变量提升的约束,这意味着let声明不会移到当前执行上下文的顶部。 在初始化之前在块中引用变量会导致ReferenceError(与用var声明的变量相反,该变量将仅具有未定义的值)。 该变量从块的开始一直处在“时间死区”中,直到进行初始化为止。

表示您在定义变量之前使用了变量。


如果您曾经使用过var ,那么由于提升,会发生var声明移动到块作用域的顶部的情况。 所以下面的功能

function foo() {
  console.log(typeof bar)
  var bar = "123";
}

被视为

function foo() {
  var bar;
  console.log(typeof bar)
  bar = "123";
}

但是,当您使用let ,它们不会被悬挂,因此声明不会移动到块的顶部。

想象一下这种简化的情况:

let a = 1;

{
 alert(a);
 let a = 2;
}

然后Alert(a)将进行变量查找。 从当前作用域(块)开始,该作用域已声明了自己的变量( let a ),但尚未设置( a = 2 ),因此尚未定义。 上限等于:

let a = 1;

{
 let a /* = undefined */;
 alert(a);
 a = 2;
}

(在执行代码之前声明变量称为提升 ...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM