铺垫 // 对象有属性和方法,原始值没有属性和方法,经过包装类的过程
概念:
包装对象:
包装对象,就是当基本类型以对象的方式去使用时,JavaScript会转换成对应的包装类型,相当于new一个对象,内容和基本类型的内容一样,然后当操作完成再去访问的时候,这个临时对象会被销毁,然后再访问时候就是undefined。
因为有了基本包装类型,所以JS中的基本类型值可以被当作对象来访问;
基本类型特征:
// 1.每个包装类型都映射到同名的基本类型;
// 2.在读取模式下访问基本类型值时,就会创建对应的基本包装类型的一个对象,从而方便了数据操作;
// 3.操作基本类型值的语句一经执行完毕,就会立即销毁新创建的包装对象;
———————————————— 版权声明:本文为CSDN博主「Carina_best」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/kuangruike/…
number,string,boolean都有对应的包装类型。
var num = 123;//原始值没有属性和方法
var num = new Number(123);//构造函数打印出对象123-->Number{123}
能加属性(图num.abc)能参与运算如num*2=236,但是又变回了数字类型,不再是对象了
var num = new String('wxyz');//字符串类型的对象
var bol = new Boolean('true'); //布尔
例子
var str= "abcd";
str.abc = "a";//
例1,经历包装类就能用属性和方法
var num = 4;
num.len = 3;
console.log(num.len);//undefined-->//number不带.length属性
#### //num没有length,随便赋予的**。
//系统会新建一个数字对象,令数字对象的len=3->//new Number(4).len = 3;
操作完成后会delete删除这个长度,再访问len会再一次新建一个数字对象new Number(4).len=3;访问len,没有len,返回undefined。这个隐式的环节就是包装类
例2
// var arr=[1,2,3,4];本身数组就有长度,也可以截断arr.length为4,arr.length=2;回车长度变为2;
var str ="abcd";
str.length = 2;//没有length属性
// 所以 访问.length-->系统模拟 new String("abcd").length = 2;
---->截断为2,delete销毁新建的abcd
//-->new String有length属性,就是字符串长度4,抛回4
// console.log(str);//所以仍然是abcd
#### // console.log(str.length);//4----->因为对象的字符串自带.length这个属性
例3
var str = "abc";
str+=1;
var test=typeof(str);//test="string"
if(test.length=6){//test没有length,会调用包装类返回6,6=6,往下走
test.sign="typeof返回结果String";//赋值不赋值都一样
//new String(test).sign="xxxx";
}
console.log(test.sign);//访问再new String(test).sign ----undefined