zoukankan      html  css  js  c++  java
  • 《红宝书》 |原始包装类型

    概念

    为了方便操作原始值,ECMAScript提供了3种原始包装类型:BooleanNumberString。它们在原始类型的基础上,同时具备了引用类型的特点。每当用到某个原始类型的方法或属性时,后台就会创建一个相应的原始包装类型对象,从而暴露出操作原始值的各种方法。
    ywWiGT.png

    引用类型与原始包装类型的区别在于对象的生命周期:对于引用类型,实例在离开作用域时销毁;对于原始包装类型,在它的那行代码执行完毕后销毁:

    let s1="some text"
    s1.color="red"          //创建String-添加属性-销毁
    console.log(s1.color)   //创建String-访问属性-找不到返回undefined-销毁
    

    原始包装类型本质上是引用类型,在其实例上调用typeof会返回objectObject作为工厂方法,能够根据传入值的类型返回相应的原始包装类型的实例。

    let obj=new Object("some text")
    obj instanceof String   //true
    

    Boolean

    Boolean原始包装类型实例的创建方式:

    //1.对Boolean构造函数传入true或false
    let boo=new Boolean(true)
    //2.对object构造函数传入true或false
    let boo=new Object(true)
    

    Number

    Number原始包装类型实例的创建方式:

    //1.对Number构造函数传入数值
    let num=new Number(10)
    //2.对object构造函数传入数值
    let num=new Object(10)
    

    Number类型方法

    ywIkDg.png
    toFixed():返回包含指定小数点位数的数值字符串

    //1.不足位数时补充0
    let num=10;
    num.toFixed(2)  //"10.00"
    
    //2.超过位数时四舍五入
    let num=10.005
    num.toFixed(2)  //"10.01"
    

    toExponential():返回以科学记数法表示的数值字符串

    let num=10;
    num.toExponential() //"1e+1"
    
    //传参数时,可指定小数点后的位数
    let num=10
    num.toExponential(1)  //"1.0e+1"
    

    toPrecision():根据情况返回最合理的数值字符串

    //接受一个参数,表示结果中数字的总位数
    let num=99;
    num.toPrecision(1)  //"1e+2"
    num.toPrecision(2)  //99
    num.toPrecision(3)  //"99.0"
    

    Number.isInteger():判断是否为整数

    Number.isInteger(1)     //true
    Number.isInteger(1.00)  //true
    Number.isInteger(1.01)  //false
    

    String

    String原始包装类型实例的创建方式:

    //1.对String构造函数传入字符串
    let boo=new String("hello")
    //2.对object构造函数传入字符串
    let boo=new Object("hello")
    

    String类型属性

    每个String对象都有一个length属性,表示字符串中字符的字符。双字节字符会按单字符来计数。

    let str="hello"
    str.length  //5
    

    String类型方法

    y03JiV.png
    charAt(index):返回给定索引位置的字符

    let str="hello"
    str.charAt(0)   //"h"
    str.charAt(2)   //"l"
    

    cancat(str):拼接字符串。(不改变原始字符串)

    let str="hello "
    let result1=str.concat("world")      //"hello world"
    let result2=str.concat("world","!")  //"hello world!"
    

    slice(开始索引,结束索引)substring(开始索引,结束索引):提取指定位置的字符串。省略第二个参数表示提取到结尾。(不改变原始字符串)

    let str="abcdefg "
    let result1=str.slice(1,4)  //"bcd"
    let result2=str.slice(3)    //"defg"
    
    let result1=str.substring(1,4)  //"bcd"
    let result2=str.substring(3)    //"defg"
    

    substr(开始索引,提取数目):提取指定数目的字符串(不改变原始字符串)

    let str="abcdefg "
    let result=str.substr(1,4)  //"bcde"
    

    indexOf(str):从开头开始查找指定字符串并返回索引,找不到则返回-1;接受第二个参数,表示开始搜索的位置。

    let str="hello world"
    str.indexOf("o")    //4
    str.indexOf("a")    //-1
    str.indexOf("o",5)  //7
    

    lastIndexOf(str):从结尾开始查找指定字符串并返回索引,找不到则返回-1

    let str="hello world"
    str.lastIndexOf("o")    //7
    str.lastIndexOf("a")    //-1
    str.lastIndexOf("o",5)  //4
    

    startsWith(str,index):检查字符串的开头是否为指定字符串。第二个参数表示开始检查的位置。

    let str="foobarqux"
    str.startsWith("foo")   //true
    str.startsWith("qux")   //false
    str.startsWith("foo",2) //false
    

    endsWith(str,index):检查字符串的结尾是否为指定字符串。第二个参数设定字符串结尾的位置,换句话说就是限定了字符串的长度。

    let str="foobarqux"
    str.endsWith("foo")     //false
    str.endsWith("qux")     //true
    str.endsWith("bar",6)   //true  加了索引表示字符串变为"foobar",再从这个基础上判断
    

    includes(str,index):检查字符串是否包含指定字符串。第二个参数表示开始检查的位置。

    let str="foobarqux"
    str.includes("foo")     //true
    str.includes("baz")     //false
    str.includes("foo",2)   //false
    

    trim():删除字符串前后空格符。(不改变原始字符串)

    let str="  hello world  "
    str.trim()  //"hello world"
    

    另外:trimLeft()trimStart():删除字符串开头空格符。(不改变原始字符串);trimRight()trimEnd():删除字符串结尾空格符。(不改变原始字符串)

    repeat(次数):接受整数表示复制次数,返回复制后的字符串。

    let str="ha "
    str.repeat(5)   //"ha ha ha ha ha "
    

    padStart(预期长度,填充内容):从前方开始填充,并返回填充后的字符串。接受整数表示预期字符长度;第二个参数接受字符串,表示要填充的内容,没有传表示填充空格。

    let str="haha"
    str.padStart(8)         //"    haha"
    str.padStart(8,"ha")    //"hahahaha"
    

    同理,padEnd(预期长度,填充内容)表示从后面开始填充

    toLowerCase()toLocaleLowerCase():转化为小写

    let str="HELLO"
    str.toLowerCase()   //hello
    

    toUpperCase()toLocaleUpperCase():转化为大写

    let str="hello"
    str.toUpperCase()   //HELLO
    

    在一些语言中如土耳其语言中,在转换大小写时需要特殊规则。这时候会用到toLocaleLowerCase()和toLocaleUpperCase()

    match(regexp):返回一个字符串匹配正则表达式的的结果。没有则返回nul

    let str="中国移动10086;中国联通10010"
    str.match(/d{5}/g) //["10086","10010"]
    str.match(/hello/g) //null
    

    search(regexp):返回一个匹配项的索引,没有则返回-1.

    let str="中国移动10086;中国联通10010"
    str.search(/d{5}/) //4
    str.search(/hello/) //-1
    

    replace(regexp|str, newStr|function):查找并替换。第一个参数可以是正则表达式也可以是字符串,表示需要替换的;第二个参数可以是字符串也可以是函数,表示替换成什么或如何替换。如果要替换所有的字符串,第一个参数必须是正则表达式且带有全局标记。

    let str="cat,bat,sat"
    str.replace("cat","fat")    //"fat,bat,sat"
    str.replace(/at/,"ond")     //"cond,bat,sat"
    str.replace(/at/g,"ond")    //"cond,bond,sond"
    

    相关文章:

    1. 原始值与引用值
    2. 什么是引用类型
    3. 正则表达式
    4. 什么是对象
  • 相关阅读:
    查看某个进程PID对应的文件句柄数量,查看某个进程当前使用的文件句柄数量
    Ubuntu16.04下KeepAlived+Nginx 布署
    Nginx+keepalived 高可用双机热备(主从模式/双主模式)
    LVS+KeepAlived+Nginx高可用实现方案
    golang 日志模块(log)
    redcon, Redis兼容的服务器框架
    Python进阶---python strip() split()函数实战(转)
    批量部署 自动化之
    malloc、calloc、realloc的区别(转)
    随机抽样一致性算法(RANSAC)
  • 原文地址:https://www.cnblogs.com/sanhuamao/p/14396557.html
Copyright © 2011-2022 走看看