zoukankan      html  css  js  c++  java
  • 基本包装类型

    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"
    不要在该奋斗的年纪而选择了安逸
  • 相关阅读:
    干货 | 玩转云文件存储——利用CFS实现web应用的共享访问
    干货 | 4步带你完成私有云盘搭建
    是我们控制着技术,还是技术控制着我们?
    如何辨别开发者等级?
    云托管,边缘物理计算&托管物理计算,你所需要了解的……
    干货 | 调用AI api 实现网页文字朗读
    容器技术的未来——京东云技术专访
    隐藏的历史-是什么成就了今天的硅谷?
    ffmpeg windows下编译安装
    比较和打补丁工具
  • 原文地址:https://www.cnblogs.com/qqandfqr/p/5543966.html
Copyright © 2011-2022 走看看