JS之基本包装类型

作者: fenerchen | 来源:发表于2018-03-12 20:40 被阅读5次

    为了便于操作基本类型值,,ECMAScript 提供了3 个特殊的引用类型:Boolean、Number和String。这些类型与其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为。每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些数据。

    基本包装类型总结

    字面量写法的变量,无法为其添加属性和方法,但是new运算符写法可以,但是不建议自己添加属性和方法。

    var box = 'aa'; //字面量
    box.name = 'v'; //无效属性
    box.age = function () { //无效方法
    return 100;
    };
    var box = new String('aa);  //new 运算符
    box.name = 'v'; //有效属性
    box.age = function () { //有效方法
    return 100;
    };
    

    Boolean类型

    无特定属性和方法

    Number类型


    var box = 1000.789;
    alert(box.toString()); //转换为字符串,传参可以转换进制
    alert(box.toLocaleString()); //本地形式,1,000.789
    alert(box.toFixed(2)); //小数点保留,1000.78
    alert(box.toExponential()); //指数形式,传参会保留小数点
    alert(box.toPrecision(3)); //指数或点形式,传参保留小数点
    

    String类型

    3个属性+大量可用内置方法


    var box = 'Mr.Chen';
    alert(box.charAt(1)); //r
    alert(box.charCodeAt(1)); //114
    alert(box[1]); //r,通过数组方式截取
    

    这个比较重要,需要说明一点,这4个方法均不改变元字符串。对于后3个,参数(n,m),取下标n不取m。当只有n时,取到最后一个字符(包含)。当n为负数时(无m),slice(n)和substr(n)从length+n位置取,而substring(n)返回全部。当n不为负,m为负数时,slice(n,m)取数规则不变,但是substring(n,m),将m设为0,并且方法会把较小的数字提前。substr(n,m),第二个负数转0,例如(3,-1)=》(3,0)无返回值。
    var box = 'Mr.Chen';
    alert(box.concat(' is ', ' Teacher ', '!')); //Mr.Chen is Teacher !
    alert(box.slice(3)); //Chen
    alert(box.slice(3,5)); //Ch
    alert(box.substring(3)); //Chen
    alert(box.substring(3,5)); //Ch
    alert(box.substr(3)); //Chen
    alert(box.substr(3,5)); //Chen
    var box = 'Mr.Chen';
    alert(box.slice(-3)); //Chen,6+(-3)=3 位开始
    alert(box.substring(-3)); //Mr.Chen 负数返回全部
    alert(box.substr(-3)); //Chen,6+(-3)=3 位开始
    var box = 'Mr.Chen';
    alert(box.slice(3, -1)); //Ch 6+(-1)=5, (3,5)
    alert(box.substring(3, -1)); //Mr. 第二参为负,直接转0,
    //并且方法会把较小的数字提前,(0,3)
    alert(box.substr(3, -1)); //'' 第二参数为负,直接转0 ,(3,0)
    

    字符串模式匹配也比较重要,match方法,返回一个数组,是匹配的字符串。添加index,和input属性
    var text = "cat, bat, sat, fat";
    var pattern = /.at/;
    //与pattern.exec(text)相同
    var matches = text.match(pattern);
    console.log(matches)
    var text = "mom and dad and baby";
    var pattern = /mom( and dad( and baby)?)?/gi;
    var matches = pattern.exec(text);
    console.log(matches)
    

    输出

    ["cat", index: 0, input: "cat, bat, sat, fat"]
    (3) ["mom and dad and baby", " and dad and baby", " and baby", index: 0, input: "mom and dad and baby"]
    //matches[0]是整个匹配的字符串,后面1和2是捕获的元组
    

    split()方法可以接受可选的第二个参数,用于指定数组的大小,
    以便确保返回的数组不会超过既定大小

    var colorText = "red,blue,green,yellow";
    var colors1 = colorText.split(","); //["red", "blue", "green", "yellow"]
    var colors2 = colorText.split(",", 2); //["red", "blue"]
    var colors3 = colorText.split(/[^\,]+/); //["", ",", ",", ",", ""],以非逗号分隔,共有4个分隔单词,分隔出5项
    

    alert(String.fromCharCode(76)); //L,输出Ascii 码对应值
    localeCompare(str1,str2)方法详解:比较两个字符串并返回以下值中的一个;
    1.如果字符串在字母表中应该排在字符串参数之前,则返回一个负数。(多数-1)
    2.如果字符串等于字符串参数,则返回0。
    3.如果字符串在自附表中应该排在字符串参数之后,则返回一个正数。(多数1)

    var box = 'Lee';
    alert(box.localeCompare('apple')); //1
    alert(box.localeCompare('Lee')); //0
    alert(box.localeCompare('zoo')); //-1
    

    trim()方法

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

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

    参考资料:JavaScript高级程序设计(第3版)

    相关文章

      网友评论

        本文标题:JS之基本包装类型

        本文链接:https://www.haomeiwen.com/subject/fddofftx.html