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
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这是由于浮点数字的表示语法引起的。
这俩都是合法的JS 数字类型。 所以第一个其实是被识别为
1.0
,.
就不会被认为是函数调用了。 第二个则是完整声明了一个浮点数。第一个可以这么改
1..name
。大概就是这么回事儿,具体的可以去看《你所不知道的Javascript》上卷。(应该是上卷吧)-。-
刚在chrome试了下:
既然 1.2可以访问到__proto__, 我觉得就是变成转成数值对象了, Number继承自Object,所以访问到name
//这大概就是自动转换之类的吧 = =,太深层不是很懂。坐等大神解答,顺便顶起
JavaScript有多灵活?
js 。。。各种装箱机制,基本类型被装箱成了对象,而所有的对象都继承了Obejct的原型,你对Object原型添加name,所以出现了以上的问题。。。简直是个奇观。。。