发表于: 2017-07-30 23:33:07
1 984
javascript基本包装类型介绍
1.背景介绍
我们目前对Javascript多少都有一些了解和使用。其中最基础的,就是js的数据类型,分为两大块,一个是基本数据类型,包括:undefined、null、boolean、number、string等;一个是引用数据类型,包括object、array、Date、RegExp等。在引用类型中,还有三个特殊的引用类型,和基本数据类型相似,我们接下来来认识一下:boolean、number、string。
2.知识剖析
2.1 特殊的引用类型之string
var a = "Hello World!";
var b = a.substring(3);
console.log(b);
如同上边代码所示,字符串是一个基本数据值。但是,我们知道基本数据类型不是对象,在逻辑上来讲,它不应该有方法,但是上边的substring()是如何实现的呢?详细剖析的话,我们可以把它分成一下这种步骤:
var a = new String("Hello World!");//创建String类型的一个实例;
var b = a.substring(3); //在实例上调用指定的方法;
a = null; //销毁这个实例;
console.log(b);
通过上一页的代码细节的展示,我们可以看出,基本类型的字符串就变成了和对象一样。这就引入了基本包装类型的概念:每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。
作为特殊的引用类型,其与引用类型的的主要区别在于对象的生存期上。使用new或者其他简写的方法创建引用类型的实例,在执行六离开当前作用域之前都一直保存在内存中。自动创建的基本包装类型的对象,则只存在于一行代码执行的瞬间,然后立即被销毁了。这就意味着,不能在运行时为基本类型值添加属性和方法。
var a = "something";
a.color = "red";
console.logo(a.color); //undefined
//字符方法
var svalue = "Hello World!";
console.log(svalue.length);
console.log(svalue.charAt(5));
console.log(svalue.charCodeAt(5)); //字符编码
console.log(svalue[3]); //支持IE8+ 及所有其他浏览器
String类型在ECMAScript中提供了一些方法,用于对字符串进行解析和操作。
字符串的方法:
concat()用于对一个或者多个字符串进行拼接显示,生成新的字符串,不会影响原有字符串。
//字符串方法
var svalue = "Hello";
var result = svalue.concat("Da Wa");
console.log(result);
console.log(svalue);
var b = svalue + 'Er Wa';
还有三种创建新字符串的方法:slice()、substr()、substring()。
var a = "tianqingle";
console.log(a.slice(3));
console.log(a.substring(3));
console.log(a.substr(3));
console.log(a.slice(3, 7));
console.log(a.substring(3, 7));
console.log(a.substr(3, 7));
2.4 特殊的引用类型之Boolean
var aobj = new Boolean(false);
var result = aobj && true;
console.log(result);
var bvalue = false;
result = bvalue && true;
console.log(result);
在布尔值运算中,fals&&true返回false,一假全假;布尔表达式中所有对象会返回true。
console.log(typeof aobj);
console.log(typeof bvalue);
console.log(aobj instanceof Boolean);
console.log(bvalue instanceof Boolean);
由于以上的原因,建议轻易不要使用Boolean对象。
2.3 特殊的引用类型之Number
Number类型是与数字值对应的引用类型。
var num = new Number(100);
console.log(num.toString());
console.log(num.toLocaleString());
console.log(num.valueOf());
console.log(num.toFixed(3));
console.log(num.toExponential(3));
console.log(num.toPrecision(2));//支持1到21位小数
与Boolean类型一样,同样不建议显式实例化Number类型,原因同Boolean类型一样,在使用valueOf()和instanceof()方法时会出现容易让人误解的结果,从而造成混乱。
3.常见问题
问题: 如何分割一个很长的字符串?
4.解决方案
通过字符串模式匹配的方法。
var s = "天上的云,地上的水,水清了,就可以低头看见天上的云!";
var b = s.split(',');
var c = s.split(',',2);
console.log(b);
console.log(c);
5.编码实战
参看上边简单的demo演示,暂无更多demo!
6.扩展思考
问题: 如何替换子字符串的内容?
这里使用了replace()的方法:
var h = "cat, bat, sat, fat";
console.log(h.replace("at", "ond"));
console.log(h.replace(/at/g, "end"));
7.参考文献
参考一:JavaScript高级程序设计
8.更多讨论
讨论点:大家对于基本包装类型还有哪些认识,分享一下?
评论