// js将其包装成了String类型 特殊引用类型 str调用方法的时候 js做了哪些事情
/**
* 基本数据类型(string number boolean)在调用方法或者访问属性
* 1.自动装箱 将基本数据类型包装器特殊引用类型 string String()
* 2.直接访问方法或者属性 str.split("")
* 3.自动拆箱 将特殊引用数据类型转换为基本数据类型 valueOf() toString()
*/
var str = new String('hello');
console.log(str.length); //5
console.log(str.substring(2)); //llo
console.log(typeof str); //object
str = 'hello';
console.log(typeof str); //string
/**
* 给基本数据类型添加方法或者属性 str.last() String() 包装器函数
*/
var str = 'hi';
var str1 = 'hello';
String.prototype.last = function() {
console.log('我是last方法')
}
str.last();
str1.last();
console.log(str);
//
String.prototype.mysplit = function(str) {
// 转换成数组
return Array.from(str)
}
let res = str.mysplit(str)
console.log(res, str);
/**
* str直接调用方法 数据类型变成String类型
*/
var str = new String('hello');
str.name = 'zhangsan';
str.sayName = function() {
console.log(this.name)
};
str.sayName();
console.log(str, typeof str, typeof(str.valueOf()), str.valueOf());
总结
let str = 'hello' //string
console.log(str.length); //基本数据类型,没有length方法 ->为什么可以输出5 而不报错呢?
/**
* 第一步:自动装箱->通过new创造实例对象new String(str) (把string基本数据类型参数转换成引用数据类型(object 中的子类型String))
* 第二部:调用调用String中的length方法
* 第三步: 自动拆箱->变为基本数据类型string
*/
console.log(typeof str); //string