使用typeof vs===检查未声明的变量会产生不同的结果

Using typeof vs === to check undeclared variable produces different result

本文关键字:结果 变量 typeof 检查 未声明 使用 vs      更新时间:2023-09-26

如果我有一个未声明的变量并使用typeof,它会告诉我它是undefined。但是如果我使用if (qweasdasd === undefined)检查它,它会抛出一个异常。

我不理解这种行为,因为如果第一个检查告诉undefined,那么第二个检查应该计算为if (undefined === undefined),为什么它会抛出ReferenceError异常?

typeof看起来像一个函数调用,但它不是——它是一个运算符。操作员可以违反规则。CCD_ 7不假定CCD_ 8存在;它是否存在以及它是什么是CCD_ 9存在以发现的。然而,当您测试qweasdasd === undefined时,您使用的是qweasdasd作为值,当您使用未分配值的变量时,JS会抱怨。

试图读取未声明变量的值(在将该值与undefined的值进行比较之前必须执行此操作(会引发ReferenceError。

typeof运算符应用于未声明的变量不会。

我想我对此有一个非常简单的解释——因为规范是这么说的:

  • 如果未定义变量,则typeof运算符不应引发ReferenceError异常
  1. 如果Type(val(为Reference,则
    a.如果IsUnsolvableReference(val(为true,则返回"undefined"
  • 如果操作数引用了未定义的变量,则===运算符应引发ReferenceError异常
  1. lval为GetValue(lref(

[在GetValue的定义中,我们有]

  1. base是调用GetBase(V(的结果
  2. 如果IsUnsolvableReference(V(,则抛出ReferenceError异常

您有一个未定义的变量,但没有未定义的对象值。

console.log(variable) // undefined
console.log(typeof variable) // "undefined"
console.log(variable === undefined) // Reference error
variable = undefined ; 
console.log(variable === undefined) // true

尝试访问Javascript中未定义的变量会得到ReferenceErrortypeof正在工作,因为它没有访问变量值。它正在检查其类型。

typeof不需要定义的变量。它的参数应该是表示要返回其类型的对象或基元的表达式。

typeof是一个运算符,它返回一个字符串,指示未赋值操作数的类型。未赋值的操作数是否未定义并不重要。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof

>>> if (a !== 'undefined');
Exception: ReferenceError: Can't find variable: a
>>> if (typeof a !== undefined);
undefined
>>> if (typeof a !== void 0);
undefined