javascript - 关于js对象,不大理解的几个问题?
高洛峰
高洛峰 2017-04-11 11:53:22
[JavaScript讨论组]
var i=1;
i.d=2;
alert(i.d);  //undefined
--------
 var c=new Object();
 c.b=1;
 alert(c.b);    //1
------
 var e=new Object();
 e=2;
 e.b=1;
 alert(e.b);    //undefined

为什么第一个和第三个的输出是undefined?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
高洛峰

你的问题基本就是“自动装箱”的问题,当你通过property accessor访问一个原始数据类型时,执行引擎会先自动对原始类型数据装箱,变成对象后再调用其方法/属性。所以你的代码

var i = 1;
i.d = 2;//相当于:new Number(1).d = 2;
alert(i.d);//这里相当于:alert(new Number(1).d);

注意到问题了么?两次访问都重新装箱了new Number(1),所以在第一个对象上设置的d = 2,在第二次访问时,其实是不存在的哦

阿神

是引用类型与包装类型的区别,包装类型包括String,Boolean,Number,会在创建时有效,过了一就会消失。所以var i=1;
i.d=2;//并没有报错,
alert(i.d);//但是包装类型执行完毕就没有了。引用类型就不一样,会一直有效。所以会存在。
var e=new Object();//这个e在里面确实是对象,
e=2;//这时,你赋值 typeof e--》number,实际上确实包装类型 ( 这个是不是js中弱类型的体现,引用类型也可以转换成元素类型)
e.b=1;
alert(e.b); //所以没有了

迷茫
typeof i // 'number'
i instanceof Object // Object

typeof e // 'number'
e instanceof Object // Object

i 和 e 这两个变量是属于js里的基本数据类型(原始类型)中的number,不是object
对象类型才是属性的集合,所以i.id和e.b是undefind

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

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