js高级教程 第五章-引用类型(5.6||)
Boolean类型
- 语法
var booleanObject = new Boolean(true);
可以传入参数true或者false
- 关于js中引用类型的布尔表达式造成的误解
var bo = new Boolean(false);
var result = bo && true;
alert(result);//true
可以看到结果为true。因为,在js中布尔表达式的对象会被转换为true。
- 基本类型和引用类型的布尔值的区别
1.typeof操作符对于基本类型返回boolean,对于引用类型返回Object。
2.instanceof操作符对于对象返回true,对于基本类型返回false。
var bo1 = true;
var bo2 = new Boolean();
alert(typeof bo1); //boolean
alert(typeof bo2); //object
alert(bo1 instanceof Boolean);//false
alert(bo2 instanceof Boolean);//true
Number类型
- 语法
var numberObject = new Number();
Number类型重写了valueOf()、toLocalString()和toString()方法,分别返回基本类型的数值,字符串形式的数值。
一个有趣的玩法,通过给toString()方法传递参数,可以得到这是几进制数。
var num =19;
alert(num.toString(2));//10011
此外还提供了toFixed()方法来格式化字符串数值,参数是小数点的位置
var num =19;
alert(num.toFixed(2));//‘19.00’
对于多余的小数点会四舍五入,比如如果是10.009,会变成10.01
使用toExponential()会返回e形式的数值。
var num =19;
alert(num.toExponential(2));//1.90e+1
如果你不知道使用哪一种格式化的形式最好,可以采用toPrecision(),它会替你选择最好的格式化。
var num =19;
alert(num.toPrecision(2));//19
String类型
- 语法
var stringObject = new String('hello world');
其中valueOf()、toLocalString()和toString()方法返回的是基本类型的字符串。
String类型的每个实例都提供了length属性。
var string = 'sun moon';
alert(string.length);//8
- 字符方法
charAt():用来确定字符在字符串中的位置。参数表示相对于0的位置。
var string = 'sun moon';
alert(string.charAt(1));//u
如果你想返回的是字符串的编码,那么可以使用charCodeAt()
var string = 'sun moon';
alert(string.charCodeAt(1));//117
- 字符操作方法
concat():拼接字符串,但是它产生的是新字符串,不会对原来的字符串有影响。
var string = 'sun moon';
var newstring = string.concat(" earth");
alert(newstring);//sun moon earth
alert(string);//sun moon
concat的参数可以拼接任意多的字符串。
slice():用于切割字符创,产生子字符串,可以传递两个参数,第一个是起始位置,第二个是结束位置
substring():用于切割字符创,产生子字符串,可以传递两个参数,第一个是起始位置,第二个是结束位置
substr():用于切割字符创,产生子字符串,可以传递两个参数,第一个是起始位置,第二个是切割的个数
PS:这三种方式都是产生新的字符串,所以不会对本来的字符串有影响。
实例:
var string = 'sun moon earth';
alert(string.slice(2)); //n moon earth
alert(string.substring(2)); //n moon earth
alert(string.substr(2)); //n moon earth
alert(string.slice(2,5)); //n m
alert(string.substring(2,5)); //n m
alert(string.substr(2,5)); // n moo
但是当参数是负数的时候,结果就大不相同了。
slice():将传入的负值与长度相加。
substring():将传入的负值转换为0.
substr():将传入的第一个负值与长度相加,第二个转换为0.
var string = 'sun moon earth';
alert(string.slice(-2)); //th
alert(string.substring(-2)); //sun moon earth
alert(string.substr(-2)); //th
alert(string.slice(2,-5)); //n moon
alert(string.substring(2,-5)); //su
alert(string.substr(2,-5)); //""空字符串
- 字符串位置方法
indexOf(),lastIndexOf()二者的区别在于一个是从前向后查找,一个是从后向前查找。
实例:
var str = 'my name is lily';
alert(str.indexOf("y")); //1
alert(str.lastIndexOf("y")); //14
var str2 = 'my name is lili';
alert(str.indexOf("y"));//1
alert(str.lastIndexOf("y"));//1
对于str大家是没有问题的。对于第二个str2, 如果,字符串中只存在一个该字母则返回相同的位置。
此外这个方法都可以传递第二个参数,即起始位置。
var str = 'my name is lily';
alert(str.indexOf("y",6)); //14
alert(str.lastIndexOf("y",6)); //1
- trim()方法:用于删除前置和后置的空格,并产生新的副本。
var str = ' my name is lily ';
alert(str.trim());//my name is lily
- 字符串大小转换写法
- toLowerCase()
- toUpperCase()
- toLocalLowerCase():用于特殊的语言
- toLocalUpperCase():用于特殊的语言
PS:同样是只产生副本
var str = ' my name is lily ';
alert(str.toUpperCase());//My NAME IS LILY
var str2 = 'MY NAME IS LILY';
alert(str.toLowerCase());//my name is lily
- 字符串的模式匹配方法
1.match():含有唯一参数,用来传递正则表达式的,返回字符值
var str = ' my name is lily ';
var matches = str.match(/.ily/g);
alert(matches); //lily
2.search():含有唯一参数,用来传递正则表达式的。返回位置值
var str = ' my name is lily ';
var searches = str.search(/ily/g);
alert(searches); //13
3.replace(a,b):a可以是字符串也可以是正则表达式,b可以是函数或者表达式。
var str = ' my name is lily ';
var replace = str.replace('lily','lili');
alert(replace); // my name is lili
var str2 = 'cat bat dat hat '
var replace2 = str2.replace(/at/g,'on');
alert(replace2);//con,bon,don,hon
3.split(a,b):用分隔符把字符串分割成多个子字符串,并放在数组中。a(分隔符):可以是字符串或者正则表达式,b(可选):确定数组的大小。
PS:有些浏览器并不兼容这种方式。
4.localeCompare()
该方法用于比较两个字符串,并确定位置关系。
如果A字符串应该在字符串参数前,则返回-1.
如果A字符串应该等于字符串参数,则返回0.
如果A字符串应该在字符串参数后,则返回1.
var str = 'yellow';
var lo = str.localeCompare('black');//1
var lo2 = str.localeCompare('yellow');//0
var lo3 = str.localeCompare('zoo');//-1
alert(lo);
alert(lo2);
alert(lo3);
PS:在不同的语言中localeCompare()的实现也不同
5.fromCharCode()
该方法就是charCodeAt()的反实现,就是把字符编码传唤成字符串。
alert(String.fromCharCode(104));//h
PS:这是一个String构造函数本身的静态方法。