5.6 基本包装类型

基本包装类型

为了便于操作基本类型值,ES5还提供了3个特殊的引用类型:Boolean、Number和String。
字符串是基本类型值,但是基本类型值不是对象,因而从逻辑上来讲,它们不应该有方法。
引用类型与基本包装类型的主要区别就是对象的生存期;
使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都是保存在内存中。
而自动创建的基本包装类型的对象,则只生存在于一行代码的执行瞬间,然后立即被销毁。这意味着,我们不能在运行时为基本类型值添加属性和方法。

var s1 = "some text";
s1.color = 'red';
alert(s1.color);  //undefined

undefined的原因就是第二行创建的String对象在执行第三行代码时已经被销毁了,第三行代码又创建自己的String对象,而该对象没有color属性;

5.6.1Boolean类型

理解基本类型的布尔值与Boolean对象之间的区别非常重要—当然,我们的建议是永远不要使用Boolean对象。

5.6.2Number类型

Number是与数字值对应的引用类型。要创建Number对象,可以在调用Number构造函数时向其中传递相应的数值;

var numberObject = new Number(10);

除了继承的方法之外,、Number类型还提供了一些用于将数值格式化为字符串的方法。
例如;toFixed()方法会按照指定的小数位返回数值的字符串表示,

var num = 10;
alert(num.toFixed(2));  //10.00

同样的方法有:toExponential(),该方法返回以指数表示法(也称e表示法)

var num = 10;
alert(num.toExponential(1)) //1.0e+1

toPrecision()方法可能会返回固定大小(fixed)格式,也可能返回指数(exponential)格式。具体规则是看那种格式最适合。

5.6.3 String类型

String类型是字符串的对象包装类型,可以像下面这样使用String构造函数来创建。

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

String类型提供了很多方法,用于辅助完成对ES中字符串的解析和操作。

1、字符方法

  • charAt()方法:以单字符字符串的形式返回给定位置的那个字符。
  • charCodeAt()方法:得到的不是字符而是字符编码

2、字符串操作方法

  • concat():用于将一或多个字符串拼接起来,返回拼接得到的新字符串。实际上,concat()方法可以接受任意多个参数,也就是说可以通过它拼接任意多个字符串,比如:
var str = 'hello';
var result = str.concat('world','!');

alert(result);  //'hello world!'
alert(str);   // 'hello'
  • slice()方法:
  • substr()方法:
  • substring()方法:
    第一个参数指定字符串的开始位置,第二个参数表示字符串到哪里结束。具体说,slice()和substring()的第二个参数指定的是子字符串最后一个字符后面的位置。而substr()的第二个参数指定 的则是返回的字符个数。,如果没有给这些方法传递第二个参数,则将字符串的长度作为结束位置。
var str = 'hello world';
alert(str.slice(3));    //'lo world'
alert(str.substring(3));//'lo world'
alert(str.substr(3));   //'lo world'
alert(str.slice(3));    //'lo w'
alert(str.substring(3));//'lo w'
alert(str.substr(3));   //'lo worl'

而在传递给这些方法的参数是负值的情况下,它们的行为就很不一样了;
slice()方法会将传递的负值与字符串的长度相加,
substr()方法将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0.
substring()方法会把所有负值参数都转换为0

var str = 'hello world';
alert(str.slice(-3));    //'rld'
alert(str.substring(-3));//'hello world'
alert(str.substr(-3));   //'rld'
alert(str.slice(3,-4));    //'lo w'
alert(str.substring(3,-4));//'hel'
alert(str.substr(3,-4));   //''(空字符串)

3、字符串位置方法
查找字符串的方法:indexOf()和lastIndexOf();
这两个方法都是从一个字符串中搜索给定子字符串,然后返回子字符串的位置,如果没有找到该子字符串,则返回-1。
indexOf():从字符串的开头向后搜索子字符串,
lastIndexOf():从字符串的末尾向前搜索子字符串。
这两个方法都可以接受可选的第二个参数,表示从字符串的哪个位置开始搜索。
比如:

var str = 'hello world';
alert(str.indexOf('o')); // 4
alert(str.lastIndexOf('o')); // 7
alert(str.indexOf('o',6)); // 7
alert(str.lastIndexOf('o',6)); // 4

在使用第二个参数的情况下,可以通过循环调用indexOf()或者latIndexOf()来找到所有匹配的子字符串,例如:

var str = 'adfsfghsljgh rrutyirb dfndfnkjhgu';
var positions = new Array();
var pos = str.indexOf('d');

while(pos > -1){
positions.push(pos);
pos = str.indexOf('d', pos+1);
}

alert(positions); // 得出所有'd'所在位置

4、trim()方法
这个方法会创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果。

var str = "    hello world    ";
var trimStr = str.trim();
alert(str);     //"    hello world    "
alert(trimStr); //"hello world"

5、字符串大小写转换方法

  • toLowerCase()
  • toLocaleLowerCase()
  • toUpperCase()
  • toLocaleUpperCase()
var str = 'hello world';
alert(str.toLowerCase());      //  'hello world'
alert(str.toLocaleLowerCase()); // 'hello world'
alert(str.toUpperCase());       // 'HELLO WORLD'
alert(str.toLocaleUpperCase()); // 'HELLO WORLD'

6、字符串的模式匹配方法

  • match() : 本质上与调用RegExp的exec()方法相同,match()方法只接受一个参数,要么是一个正则表达式,要么是一个RegExp对象。
var text = 'cat,bat,sat,fat';
var pattern = /.at/;
//
var matches = text.match(pattern);
alert(matches.index); //0
alert(matches[0]); //'cat'
alert(matches.lastIndex);//0

  • search():这个方法的唯一参数与macth()方法的参数相同,该方法返回字符串第一个匹配项的索引,如果没有找到匹配项,则返回-1;
  • replace(): 替换字符串,第一个参数:可以是一个RegExp对象或者一个字符串;第二个参数:可以是一个字符串或者一个函数;
    如果第一个参数是字符串,那么只会替换第一个子字符串。要想替换所有子字符串,唯一的办法就是提供一个正则表达式,而且要指定全局(g)标志;比如:
var text = 'cat,bat,sat,fat';
var result = text.replace('at','ond');
alert(result); //'cond,bat,sat,fat'

result = text.replace(/at/g,'ond');
alert(result); //'cond,bond,sond,fond'

replace()方法的第二个参数也可以是一个函数。这个函数应该返回一个字符串,表示应该被替换的匹配项使用函数作为replace()方法的第二个参数可以实现更加精细的替换操作;比如:

function html(text) {
 	return text.replace(/[<>"&]/g, function(match, pos, org){
	switch(macth) {
		case "<" : return "&lt";
		case ">" : return "&gt";
		case "&" : return "&amp;";
		case "\" : return "&quot;";
		}
	})
}
alert(html("<p>hello world!</p>"));
//

-split():这个方法可以基于指定的分隔符将一个字符串分割成多个子字符串,并将结果放在一个数组中。该方法可以接受第二个参数,用于指定数组的大小,以便确保返回的数组不会超过既定大小。

7、localeCompare()方法
8、fromCharCode()方法

猜你喜欢

转载自blog.csdn.net/weixin_42575028/article/details/88721645
5.6
今日推荐