基本包装类型

ECMAScript5还提供了三个特殊的引用类型:Boolean Number String
这些类型与其他的引用类型相似,但是也具有各自的基本类型的特殊行为。每当读取一个基本类型值的时候,
后台就会创建一个对应的基本包装类型的对象

1         var s1 = "some text";
2         var s2 = s1.substring(2);

s1包含一个字符串是一个基本类型值,所以不可能有方法,但是在后台经历了这样三个过程:

(1)创建String类型的一个实例
(2)在实例上调用指定的方法
(3)销毁这个实例

三个步骤执行了下列ECMAScript实例

1         var s1 = new String("some text");
2         var s2 = s1.substring(2);
3         s1 = null;

上面三个实例也同样适用于Boolean和String类型对应的布尔值和数字值

引用类型与基本包装类型的主要区别是对象的生存期。使用new操作符创建的引用类型实例,在执行流离开当前作用域之前都一直保存在内存中,而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间

1         var s1 = "some text";
2         s1.color = "red";
3         alert(s1.color); //undefined

还可以显示的调用Boolean、Number、String来创建基本包装类型的对象(不推荐这样做,因为容易分不清是引用类型还是基本包装类型)对基本包装类型的实例调用typeof会返回"object",而且所有的基本包装类型的对象都会被转换成布尔值true

1         var obj = new Object("some text");
2         alert(obj instanceof String); //true

传入数值参数则会得到Number实例,Boolean同样
注意:使用new调用基本包装类型的构造函数,与直接调用同民的转型函数是不一样的

1         var result = "25";
2         var number = Number(result);
3         alert(typeof number);//"number"
4 
5         var obj = new Number(result);
6         alert(typeof number);//"object"

 

Boolean类型

 


Boolean类型是与布尔值对应的引用类型。

1     var booleanObject = new Boolean(true);

Boolean对象在ECMAScript中的用处不大,因为常会造成人们的误解

1         var falseObject = new Boolean(false);
2         var result = falseObject && true;//所有的基本包装类型的对象都会被转换成布尔值true
3 
4         alert(result); //true
5 
6         var falseValue = false;
7         var result = falseValue && true;
8         alert(result);//false

 

Number类型

 


 

1     var numberObject = new Number(10);

 

与Boolean类型一样,Number类型也重写了valueOf()、toLocaleString()、toString()方法。重写后的valueOf方法返回对象表示的基本类型的数值,另外两个方法返回字符串形式的数值。可以为toString()方法传递一个表示基数的参数,告诉它返回几进制数值的字符串形式

1         var num = 10;
2         alert(num.toString()); //"10"
3         alert(num.toString(2)); //"1010"

toFixed()方法会按照指定的小数位返回数值的字符串表示

1         var num = 10;
2         alert(num.toFixed(2)); //"10.00"
3 
4         var num = 10.005;
5         alert(num.toFixed(2));//"10.01"

toExponential()方法返回以指数表示法表示的数值的字符串形式

1         var num = 10;
2         alert(num.toExponential(1));//"1.0e+1" 参数设置返回值的小数位

toPrecision()方法可能会返回固定大小格式,也可能返回指数格式,具体规则看哪种格式最合适。接受一个参数,表示数值所有数字的位数(不包括指数部分)

1         var num = 99;
2         alert(num.toPrecision(1)); //"1e+1"
3         alert(num.toPrecision(2)); //"99"
4         alert(num.toPrecision(3)); //"99.0"

不建议直接实例化Number类型,原因与显示创建Boolean类型一样,具体来讲就是typeof和instanceof操作符测试基本类型与引用类型数值时,得到的结果完全不同。

1         var numberObject = new Number(10);
2         var numberValue = 10;
3         alert(typeof numberObject); //"object"
4         alert(typeof numberValue); //"number"
5         alert(numberObject instanceof Number); //true
6         alert(numberValue instanceof Number); //false

 

String类型

 

1      var stringObject = new String("hello word");

 

继承的valueOf()、toLocaleString()、toString()都返回对象所表示的基本字符串值。String类型的每个实例都有一个length属性,表示字符串中包含多个字符。

1          var stringValue = "hello word";
2          alert(stringValue.length); //"11";

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

 1、字符方法

两个用于访问字符串中特定字符的方法:charAt()和charCodeAt()
charAt()方法以单字符的形式返回给定位置的那个字符(基于0)
charCodeAt()方法返回给定位置的那个字符的字符编码

1          var stringValue = "hello word";
2          alert(stringValue.chartAt(1)); //"e"
3          alert(stringValue.charCodeAt(1)); //"101"

ECMAScript5还定义了另一个访问个别字符串的方法,可以用方括号加数字索引来访问字符串中特定字符

1          var stringValue = "hello word";
2          alert(stringValue[1]); //"e"

 2、字符串操作方法

concat()方法用于拼接一个或者多个字符串,返回拼接后新的字符串(在实际中用的更多的换是+操作符)

1          var stringValue = "hello";
2          var result = stringValue.concat(" word !");
3          alert(result); //"hello word !"
4          alert(stringValue); //"hello"

ECMAScript5还提供了三个基于子字符串创建新字符串的方法:slice()、substr()、substring()。都接受一到两个参数,第一个参数表示子字符串开始的位置,第二个参数表示子字符串结束的位置。具体来说,slice()、substring()第二个参数表示子字符串最后一个字符后面的位置,而substr()的第二个参数指定的则是返回的字符个数。

1          var stringValue = "hello word";
2          alert(stringValue.slice(3));//"llo world"
3          alert(stringValue.slice(3, 7)); //"lo w"
4          alert(stringValue.substring(3, 7)); //"lo w"
5          alert(stringValue.substr(3, 7)); //"lo worl"

在传递给这些方法的参数时负值时。slice()会将负值与字符串的长度相加,substr()方法将负的第一个参数字与符串的长度相加,将负的第一个参数转换为0。substring()
方法会将所有的负值转换为0。

 3、字符串位置方法

indexOf()从开头向后搜索子字符串
lastIndexOf()从末尾开始向前搜索子字符串

1          var stringValue = "hello word";
2          alert(stringValue.indexOf("o")); //4
3          alert(stringValue.lastIndexOf("o")); //7

这两个方法都可以接受第二个参数,表示从子字符串的哪个位置开始搜索。

1          var stringValue = "hello word";
2           alert(stringValue.indexOf("o",6)); //7
3          alert(stringValue.lastIndexOf("o",6)); //4

 可以通过循环调用indexOf()和lastIndexOf()来找到所有匹配的子字符串

1          var stringValue = "Lorem ipsum dolor sit amet,consectetur adipisicing elit"
2          var positions = new Array();
3          var pos = stringValue.indexOf("e");
4          while(pos >= -1){
5              positions.push(pos);
6              pos = stringValue.indexOf("e",pos + 1);
7          }
8          alert(positions); //"3,24,32,35,52"

4.trim()方法

这个方法会创建一个字符串的副本,删除前置及后置的所有空格

1          var stringValue = "   hello world   ";
2          var trimmedStringValue = stringValue.trim();
3          alert(trimmedStringValue); //"hello world"

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

经典方法:toLowerCase()和toUpperCase()
toLocaleLowerCase()和toLocaleUpperCase()方法则是针对特定地区的实现

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

match(),在字符串上调用这个方法,本质上一调用RegExp的exec()方法相同。
只接受一个参数要么是一个正则表达式要么是一个RegExp对象。

1          var text = "cat,bat,sat,fat";
2          var pattern = /.at/;
3          var matches = text.match(pattern);
4          alert(matches.index); //0
5          alert(matches[0]); //"cat"

search(),返回字符串中第一个匹配项的索引,如果没有找到匹配项,则返回-1,接受的参数与match()相同

1           var text = "cat,bat,sat,fat";
2           var pos = text.search(/at/);
3           alert(pos);

replace()方法接受两个参数,第一个参数可以使字符串或者RegExp对象,第二个参数可以使一个字符串或者是一个函数,如果第一个参数是字符串,那么只会替换第一个子字符串。要想替换所有子字符串,唯一的方法就是提供一个正则表达式,而且要指定全局(g)标志

1         var text = "cat,bat,sat,fat";
2         var result = text.replace("at","ond");
3         alert(result); //"cond,bat,sat,fat"
4 
5         var text = "cat,bat,sat,fat";
6         result = text.replace(/at/g,"ond");
7         alert(result);

如果第二个参数时字符串,那么还可以使用一些特殊的字符序列,将正则表达式操作得到的值插入到结果字符串中

字符序列 替换文本
$$ $
$& 匹配整个模式的子字符串。与RegExp.lastMatch的相同
$'  匹配的子字符串之前的子字符串。与RegExp.leftContext的相同
$` 匹配的子字符串之后的子字符串。与RegExp.rightContext的相同
$n 匹配第n个捕获组的子字符串。其中n等于0~9
$nn 匹配第nn个捕获组的子字符串。其中n等于01~99
1         var text = "cat,bat,sat,fat";
2         result = text.replace(/(.at)/g,"word ($1)");
3         alert(result);

split(),这个方法可以基于指定的分隔符讲一个字符串分隔成多个子字符串,并将结果放在一个数组中。可以接受第二个参数,指定数组的大小。

1         var colorText = "red,blue,green,yellow";
2         var colors1 = colorText.split(",",2);
3         alert(colors1);

7、localeCompare()方法
如果字符串在字母表中应该排在字符串参数之前,则返回一个负数(大多是-1)
如果字符串等于字符长参数,则返回0
如果字符串在字母表中应该排在字符串参数之后,则返回一个正数(大多是1)

1         var stringValue = "yellow";
2         alert(stringValue.localeCompare("brick")); //1

因为localeCompare()方法返回的数值取决于实现,所以最好是像下面例子所示的这样使用这个方法

 1         function determineOrder(value){
 2             var result = stringValue.localeCompare(value);
 3             if(result < 0){
 4                 alert("The string 'yellow' comes before the string '"+ value +"'.");
 5             }
 6             else if(result > 0){
 7                 alert("The string 'yellow' comes after the string '"+ value +"'.");
 8             }
 9             else{
10                 alert("The string 'yellow' is equal to the string '"+ value +"'.");
11             }
12         }
13 
14         determineOrder("brick");

8、fromCharCode()方法
接受一或多个字符编码,然后将它们转换成一个字符串。

1          alert(String.fromCharCode(104,101,108,108,111)); //"hello"

 

posted @ 2016-05-30 21:29  老板丶鱼丸粗面  阅读(201)  评论(0编辑  收藏  举报