node.js - javascript的undefined
PHP中文网
PHP中文网 2017-04-10 16:18:43
[JavaScript讨论组]
var obj1={a:1,b:2};

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

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

PHP中文网
PHP中文网

认证0级讲师

全部回复(5)
高洛峰

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了 。

PHP中文网

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

PHPz

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

阿神

c in object. 取不到,不报错

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号