包装对象
现实开发中我们经常会用到包装对象,如下代码:
var string = 'hello , 我是老六';
var arr = string.split(',');
大家是否注意到这个问题,这种基本数据类型不是对象,为什么它会有属性呢?
只要引用了字符串string的属性,js就会将字符串值通过调用 new String(string)的方式转换为对象,这个对象继承了字符串的方法,并被用来处理属性的引用。 这时候string.split(',')产生了一个临时字符串对象,可以使用String上的方法。不过要注意的是,一旦属性引用结束,这个新创建的对象就会销毁。
如下代码很好证明了这一临时对象创建和销毁的过程:
var s = 'hello , 我是老六'; //创建一个字符串
s.leng = 5; //设置s.leng(不是s.length)属性值
var word = s.leng; // word为undefined
第二行代码,s.leng创建了一个临时字符串对象,并给s.leng赋值为5,然后销毁这个临时对象。所以第三行查询不到s.leng,因为被自动销毁了。
总结:
包装对象: 存取字符串,数字,布尔值的属性时创建的临时对象。
当基本数据类型(number,string,boolean)调用对应String类,Number类,Boolean类的方法时,js自动隐式调用new String()或者new Number()或者new Boolean()的方式,使得数据操作得以实现。 null和undefined没有包装对象,访问他们的属性会造成一个类型错误。
当然我们也可以手动显示创建包装对象:
var s = 'hello , 我是老六', n = 123 , b = true;
var S = new String(s);
var N = new Number(n);
var B = new Boolean(b);
打印s与S的结果对比:
S
String {"hello , 我是老六"}0: "h"1: "e"2: "l"3: "l"4: "o"5: " "6: ","7: " "8: "我"9: "是"10: "老"11: "六"length: 12__proto__: String[[PrimitiveValue]]: "hello , 我是老六"
s
"hello , 我是老六"
s==S
true
s===S
false
typeof s
"string"
typeof S
"object"
包装对象的应用场景:
主要应用:跟第一个代码一样。 临时对象调用方法得出想要的操作数据,然后存储这个理想中的操作数据。并不会对变量string造成影响。
var string = 'hello , 我是老六';
var arr = string.split(',');
以上为个人学习研究心得,如有不正确或者有别的见解的地方,欢迎下方留言评论交流分享
本人及工作室承接 软件开发、技术咨询、代写代码(大小项目)、软件模板出售、项目教学、毕业实践项目
个人微信:laoliukaifa 工作室网站:www.globalbuy123.com