为什么 String.prototype 像标准对象一样记录它的对象,而 Array.prototype 像标准数组一样记录它的对象?

IT技术 javascript string object prototype this
2021-03-18 10:21:26

为什么 String.prototype 使用标准的大括号和键值对记录字符串对象,而 Array.prototype 记录数组对象就像一个带有方括号和值的数组?

String.prototype.test = function(){
    console.log(this); // logs { '0': 't', '1': 'e', '2': 's', '3': 't' }
};
var str = 'test';
str.test();
Array.prototype.test1 = function(){
    console.log(this); // [1,2,3,4]
};
var arr = [1,2,3,4];
arr.test1();

1个回答

因为在方法调用中,this参数总是(在草率模式下)转换为对象。你看到的是一个String对象,它是由"test"原始字符串值产生的。你调用方法的数组已经是一个对象,所以什么都没有发生,你只是像以前一样得到数组。

如果您使用严格模式,则不会发生此转换:

String.prototype.test = function() {
    "use strict";
    console.log(this);
};
var str = 'test';
str.test(); // logs "test"
@slebetman:您从未向 中添加过方法Boolean,是吗?:-)
2021-05-02 10:21:26
还值得注意的是,发生这种情况的唯一其他类型是Number.
2021-05-11 10:21:26