今天主要学习了三个特殊的引用类型:Boolean,Number和String。同时也回顾了一下以前学习的知识。
首先,我们知道基本类型值不是对象,因此不应该会有方法。但是,实际上它们是有方法的。每当读取一个基本类型值的时候,后台就会创建一个对应的包装类型的对象,从而让我们可以调用一些方法来操作这些数据。
对基本包装类型的实例调用typeof会返回“object”,而且所有基本包装类型的对象都会被转换为布尔值true。
(一)Boolean类型
要创建一个Boolean对象,可以调用Boolean构造函数并传入true或false。
var boolean1=new Boolean(true);
Boolean类型的实例重写了valueOf()方法,返回基本类型值true或false;重写了toString()方法,返回字符串"true"或"false"。
目前,Boolean类型出现的最常见的问题是在布尔值表达式中使用Boolean对象。例如:
var one=new Boolean(false);
var result=one&&true;
alert(result);//输出true
按理说,在布尔运算中false&&true等于false,但是这里却是true。这是因为这里是对one而不是对它的值(false)进行求值,在布尔表达式中的所有对象都会被转换为true,true&&true结果当然输出为true。
var one=false;
var result=one&&true;
alert(result);//输出false
在这里就是对one的值进行求值,因此false&&true结果输出false。
还有,基本类型与引用类型的布尔值还有两个区别,typeof操作符对基本类型返回"boolean",而对引用类型返回"object"。其次,因为Boolean对象是Boolean类型的实例,所以使用instanceof操作符测试Boolean对象会返回true,而测试基本类型的布尔值会返回false。
(二)Number类型
Number类型也重写了valueOf(),toLocaleString()和toString()方法。valueOf()返回对象表示的基本类型的数值。另外两个返回字符串形式的数值。
Number类型提供的方法:
toFixed()方法会按照指定的小数位返回数值的字符串形式,同时还能自动舍入。例如:
var num=10.005;
alert(num.toFixed(2));//输出“10.01”
toExponential()方法会以指数表示法返回数值的字符串形式。参数也是指定输出结果中的小数位数。
var num=10;
alert(num.toFixed(1));//输出"1.0e+1";
toprecision()方法可能返回fixed格式,也可能返回exponential格式,主要看哪种比较适合。也是接收一个参数,表示数值的所以数字的位数。
var num=99;
alert(num.toprecision(1));//"1e+2"
alert(num.toprecision(2));//99
alert(num.toprecison(3));//99.0
(三)String类型
继承的valueOf(),toLocaleString()和toString()方法都返回对象所表示的基本字符串值。
String类型也提供了很多方法:
charAt()方法以单字节字符串的形式返回给定位置的那个字符。例如:
var one="blue";
alert(one.charAt(1));//输出"l"
如果你想得到的是字符编码,那么可以使用charCodeAt()。
concat()方法用于将一或多个字符串拼接起来,返回拼接得到的新字符串。同时不改变原字符串。
var one="hello "
var result=one.concat("world","!");
alert(result);//输出“hello world!”
三个基于子字符串创建新字符串的方法:slice(),substr()和substring()。这三个方法都返回被操作字符的一个子字符串,而且都接收一或两个参数。slice()和substring()方法第一个参数指定子字符串开始的位置,第二个指定结束位置。substr()第二个参数指定的是返回字符的个数。这三个方法也不会修改原字符串。
var one="hello world";
alert(one.slice(1));//"ello world"
alert(one.substring(1));//"ello world"
alert(one.substr(1));//"ello world"
alert(one.slice(1,7));//"ello w"
alert(one.substring(1,7));//"ello w"
alert(one.substr(1,7));//"ello wo"
当参数是负数时,这三个方法的结果就有很大的不同了。
slice()方法会将传入的负数与字符串长度相加。
substr()方法将第一个参数与字符串长度相加,第二个参数为0。
substring()方法会把所以负值参数变为0。
字符串位置方法:indexOf()和lastIndexOf()。从一个字符串中搜索给定子字符串,返回子字符串的位置。
trim()方法会创建一个字符串的副本,删除前置及后缀的所有空格。
toLowerCase(),toLocaleLowerCase()和toUpperCase(),toLocaleUpperCase()大小写转换的方法
String类型提供了用于字符串中匹配模式的方法。
match()方法,只接收一个参数,正则表达式或一个RegExp对象。
var text="cat,bat,sat,fat";
var pattern=/.at/;
var matches=text.match(pattern);
alert(matches[0]);//"cat"
search()方法参数与match()方法的参数相同。返回字符串中第一个匹配项的索引。
replace()方法接收两个参数:第一个参数可以是字符串或一个RegExp对象,第二个参数可以是字符串或一个函数。
如果第一个参数是字符串,那么只会替换第一个子字符串。要想替换所有的子字符串需要用正则表达式,而且要指定全局g。
var text="cat,bat,sat,fat";
var result=text.replace("at","on");
alert(result);//输出"con,bat,sat,fat"
result=text.replace(/at/g,"on");
alert(result);//"con,bon,son,fon"
localeCompare()方法用于比较两个字符串,字符串在字母表排在参数之前返回负数,排在之后返回正数,等于返回0;
var num="body";
alert(num.localeCompare("cat"));//-1
alert(num.localeCompare("body"));//0
alert(num.localeCompare("ace"));//1