???? 在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
??????
???
?????