在JS中,对未声明的变量进行读取访问会产生引用异常。
我尝试了以下代码:
var obj = { };
console.log(obj.v1);
这会打印未定义的
console.log(v2);
虽然这会抛出异常。
不同行为的原因是什么? 在这两种情况下我都期待异常,因为v1和v2都是未声明的。
编辑:更令人困惑的是,如果v2在全局范围内声明,它将成为window对象的属性。那么它是否与我访问窗口对象的未声明属性的情况类似?与案例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)