javascript - JS中设置Object.prototype.name=1后为何console.log(1.2.name)会输出1?
PHPz
PHPz 2017-04-11 09:12:02
[JavaScript讨论组]

JS中设置Object.prototype.name = 1,为何console.log(1.2.name)会输出1?是什么原因?求大神指教~~

Object.prototype.name = 1;
console.log(1.name); // error
console.log(1.2.name); // 1
PHPz
PHPz

学习是最好的投资!

全部回复(4)
阿神

这是由于浮点数字的表示语法引起的。

1. 
1.0
1.005

这俩都是合法的JS 数字类型。 所以第一个其实是被识别为1.0. 就不会被认为是函数调用了。 第二个则是完整声明了一个浮点数。

第一个可以这么改 1..name

大概就是这么回事儿,具体的可以去看《你所不知道的Javascript》上卷。(应该是上卷吧)-。-

高洛峰

刚在chrome试了下:

1['name'] // 1
1.2['name'] // 1

1.2.__proto__ // Number {[[PrimitiveValue]]: 0}

既然 1.2可以访问到__proto__, 我觉得就是变成转成数值对象了, Number继承自Object,所以访问到name

//这大概就是自动转换之类的吧 = =,太深层不是很懂。坐等大神解答,顺便顶起

阿神

JavaScript有多灵活?

天蓬老师

js 。。。各种装箱机制,基本类型被装箱成了对象,而所有的对象都继承了Obejct的原型,你对Object原型添加name,所以出现了以上的问题。。。简直是个奇观。。。

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

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