首页 > javascript的undefined

javascript的undefined

var obj1={a:1,b:2};

console.log(obj1.c); //undefined
console.log(global.c); //undefined
console.log(c); //报错

javascript对于undefined的定义是已声明但未初始化的变量,那么为什么obj1.c不会报错而返回undefined?


1)对声明了变量但是未对其初始化-赋值时,这个变量的值就是undefined
2)对于尚未声明的变量,只能执行typeof操作,其它的操作就会报ReferenceError:未定义的错误
3)对一个undefined变量执行操作,会报TypeError:不能从一个undefined对象读取属性
4)对于一个函数中未定义的变量求值,会沿其闭包调用链接往上寻找其变量定义,如果一直到global(全局)context还未找到这个变量的定义,那么就会报变量未定义的错误;如果有定义但是未赋值,会返回undefined;如果有定义并赋值了,会返回这个变量定义的值
5)默认情况下(没有对一个对象的属性进行特殊的设置,例如配置不可变更,不可枚举等,不可读写等),对于一个对象的属性取值,首先沿着原型链检查其属性是否存在,如果存在,返回对应的value;如果不存在直接返回undefined
console.log(object1.c); console.log(global.c);适合规则5
console.log(c);适用规则4

对于规则4的例子

(function(){   
    function a(){
       console.log(b);//报错,b is not defined
    }
    a();
}());
(function(){
    var b;   
    function a(){
       console.log(b);//不报错,输出undefined
    }
    a();
}());

可以这样理解整个JS运行在一个闭包环境下,这个闭包的顶层为全局环境


回答可以很简单。
你这里的object1.c = object1[c]
没有找到这个键,当然返回的就是undefined了 。


c in object. 取不到,不报错


undefined字面意思就是未定义…当你指定了他存在的父类去找就会报undefined,你试试看obj.c.d就报错了,因为c开始就不存在了,如果你想外层的不报错而是undefined,你可以window.c,那也是输出undefined


你调用了obj.c,他就创建了obj.c这个变量,但是实际上你没有给他初始化值就调用了,所以undefined

【热门文章】
【热门文章】