Javascript 为什么返回这个结果会产生一个对象?
有人能给我解释一下这种行为吗Javascript 为什么返回这个结果会产生一个对象?,javascript,Javascript,有人能给我解释一下这种行为吗 Object.prototype.getThis = function () { return this; }; var s = "some text"; console.log(s.getThis()); // [String 'some text'] console.log(typeof s.getThis()) // object 为什么获取此返回一个对象?当您将字符串原语值当作对象使用时,JavaScript会隐式地从中创建一个字符串实例。好像是你
Object.prototype.getThis = function () {
return this;
};
var s = "some text";
console.log(s.getThis()); // [String 'some text']
console.log(typeof s.getThis()) // object
为什么
获取此
返回一个对象
?当您将字符串原语值当作对象使用时,JavaScript会隐式地从中创建一个字符串实例。好像是你写的
console.log(new String(s).getThis().toString());
基本值不是对象。但是,所有基本类型都有内置的对象包装类型,这些包装类型是各种方法(如.charAt()
、.trim()
、.slice()
)所在的位置
edit-@Bergi在一篇评论中指出,在“严格”模式下,运行时仍然会从字符串和对象原型中查找方法,就好像正在创建字符串实例一样,但调用这些方法时,
此
是对原始原语值的引用。,因为字符串是object@AbdelrhmanMohamed字符串实例是对象,但字符串基元不是对象。因为sloppy模式。@Bergi在strict模式下不会发生同样的事情吗?@Pointy::-)strict方法的基元的值不是100%准确。方法(来自对象)仍然会在原语上被调用,thisArg
是原语value@Bergi那是2015年的事,对吗?因此,它不是假装合成一个字符串实例并让它去做,而是做一些奇怪的事情,调用字符串或对象原型方法,并将这个绑定到原始原语?不,一直都是这样。我的意思是,自从严格模式被引入以来。@Bergi说的“ES2015”基本上是指“新式”。有意义,并且没有“拳击”对象那么怪异。