你的位置:首页 > Java教程

[Java教程]特殊的引用类型


今天主要学习了三个特殊的引用类型: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