为什么在未声明的对象属性的情况下不会出现引用异常?

时间:2017-11-02 12:17:21

标签: javascript

在JS中,对未声明的变量进行读取访问会产生引用异常。

我尝试了以下代码:

var obj = { };
console.log(obj.v1);

这会打印未定义的

console.log(v2);

虽然这会抛出异常。

不同行为的原因是什么? 在这两种情况下我都期待异常,因为v1和v2都是未声明的。

编辑:更令人困惑的是,如果v2在全局范围内声明,它将成为window对象的属性。那么它是否与我访问窗口对象的未声明属性的情况类似?与案例1相同?

1 个答案:

答案 0 :(得分:1)

var obj = { };

console.log(obj.v1);

obj已定义,但其属性v1不存在,因此输出undefined

console.log(v2);

v2未声明,输出如Uncaught ReferenceError: ...

window.v2输出的

undefined,但仅v2输出为:ReferenceError

var foo = 1;
// Explicit global/window variable (new variable)

bar = 2;
// Implicit global/window variable (property of default global object)