日期:2014-05-16  浏览次数:20423 次

JavaScript 基本包装类型

???? 在JavaScript中,和JAVA类似,也提供了对于基本数据类型的包装类型。例如Number、Boolean、String类型。下面一一介绍下:

??? 先来看下Boolean类型,它支持以下的构造函数创建对象:

???

var booleanObject = new Boolean(true);

?

???? Boolean类型的实例重写了valueOf()方法,返回基本类型值true或false;重写了toString()方法,返回字符串"true"和"false",其中typeof 操作符对基本类型返回boolean,对引用类型返回object。

?

?? 再来看下Number类型,与Boolean类型一样,Number类型也重写了valueOf(),toLocalString()和toString()方法。重写后的valueOf()方法返回对象的基本类型的数值,另外两个方法返回字符串形式的数值。其中toString()方法还提供了一个可选的参数,表示要转换成哪种进制。

??? 它也支持以下的构造函数来创建:

???

var number = new Number(10);

?

?? 例如:

??

var a = new Number(10);
alert(a.toString());//输出10
alert(a.toString(2));//输出1010
alert(a.toString(8));//输出12

?

?? Number实例类型还提供了一个比较有用的方法toFixed(num)。其中num表示显示几位小数,接近的最大小数位会采取舍入制度。例如:

???

var numberValue=new Number(10.124);
alert(numberValue.toFixed(2));//输出10.12
var numberValue=new Number(10.125);
alert(numberValue.toFixed(2));//输出10.13

?

??? 最后看下String实例类型,它也是字符串的对象包装类型。它的构造函数也像下面这样:

????

var StringObject = new String("hello world");

?

??? 它提供了简单的按序列位置的访问方式,分别为charAt(index)和charCodeAt(index),前者返回该位置上的字符(不是字节)。后者返回该字符上的字符编码。例如:

????

var value="hello world";
alert(value.charAt(3));//输出l(字母l)
alert(value.charCodeAt(3));//输出108(l的ASCII编码)

??? 同时它也提供了简单的字符串操作方法,包括concat()、slice()、substr()、substring()方法。下面分别介绍下:

??? concat()方法接受任意数量的参数,用于把参数连接到字符串类型的末尾。例如:

???

var value="hello ";
alert(value.concat("world"," sweet"));//输出hello world sweet

?

????至于slice方法,它非常接近于数组类型Array的slice()方法,不得不说的,这也正是Python字符串切片的思想来源--让所有的序列类型支持切片。只是Python将这里的数组拆分成了两种类型--元组和列表。

??? 看下slice()方法的简单例子:

??

var value="hello";
alert(value.slice(1));//输出ello
alert(value.slice(1,4));//输出ell
alert(value.slice(-4,-2));//输出el
alert(value.slice(-4));//输出ello

????? 而对于剩下的substr(),substring()方法,个人认为最好将它们保持它们方法的初衷,例如substr(index[,n])就是返回从index(包括index)开始,长度为n的字符串。而substring(from,to)返回[from,to)区间的字符串。

????? 同样JS的字符串实例类型也提供了与JAVA类似的indexOf()和lastIndexOf()方法。两个方法的参数都是一样的--(char[,index]),其中第二个参数表示从第几个位置开始找。例如下面的例子,用于查取一个字符串里面某个字符出现的全部位置。

????

var str="hello world";
var array=[];
var position=str.indexOf("l");
while(position>-1){
	array.push(position);
	position=str.indexOf("l",position+1);
}
alert(array);//输出2,3,9	

?????? JS的字符串实例类型还提供了用于匹配模式的方法,第一个方法就是match(),它跟RegExp对象的match方法很类似,都返回满足所有匹配元组的一个匹配数组。例如:

??????

var text=new String("cat,mat,fat,dat");
var pattern=/.at/g;
var array=text.match(pattern);
alert(array+"\t"+array.length);//输出cat、mat、fat、dat  4 
//表明这是包含4个元素的数组

??????? 为了简化对字符串的操作,ECMAScript提供了replace方法(值得一提的是它没有提供类似于JAVA的replaceAll方法),该方法接受2个参数,第一个参数为一个RegExp对象或者一个字符串对象(JS这里不会将它转换成正则表达式对象),第二个参数一般为用于替换的字符串或者函数。例如:

???????

var text=new String("cat,mat,fat,dat");
var singleValue=text.replace("at","ond");
alert(singleValue);//输出cond,mat,fat,dat
var multiValue=text.replace(/at/g,"ond");
alert(multiValue);//输出cond,mond,fond,dond

?

????? 注意这里如果第一个参数为字符串对象或者未指定全局匹配项g的时候,将只会替换第一个匹配的元素。

??????最后一个与模式匹配相关的方法是split方法,这个方法非常接近于Java的split()方法。它们的参数形式都是(pattern[,num])?,其中pattern可以是一个字符串或者一个正则表达式,而第二个参数表示分割的次数(通俗的说就是分割后的数组长度)。例如:

??????

var text=new String("cat,mat,fat,dat");
var array=text.split(",");
alert(array);//输出cat,mat,fat,dat这样的数组
array=text.split(",",2);
alert(array);//输出cat,mat

??????

???

?????