第五章 引用类型(6.基本包装类型)

  ·   JS高设(第三版)   ·   JavaScript     浏览量:

基本包装类型就是为了操作基本数据类型的值,ES提供了3个特殊的引用类型:Boolean、Number和String。
每当创建一个基本类型值的时候,后台就会创建一个对应的基本包装类型对象
基本数据类型,Undefined,Null,Number,String,Boolean,引用数据类型:Object。因此除对象外,undefined和null的值就是他自身的字面量,所以还剩三个需要额外提供包装类型进行访问数据值,hiahiahia,总结到位
如以下代码

    var s1 = "我是字符串";
    var s2 = s1.substring(2);

在执行时,可以想象为以下代码

    var s1 = new String("我是字符串");
    var s2 = s1.substring(2);
    s1 = null;

以上三个步骤也适用于Boolean,Number对应的布尔值和数值。
与引用类型不同的是,自动创建的基本包装类型对象如同蜉蝣一般转瞬即逝,只存在于代码执行的一瞬间,人后就被人道主义毁灭,所以我们不能在运行时为基本类型值添加属性和方法。
一目了然,不言而喻
5
上图中s2打印出undefined说明不能在运行时为基本类型值添加属性和方法。
而s1却可以,但是除了傻叉没人会这么做,不然会分不清他是引用类型还是基本类型,我觉得设计的人也是傻叉

使用基本包装类型的构造函数和同名的转型函数是不一样滴,如下图,一目了然,不言而喻
6

所以,基本包装类型的意义不在于让我们去使用它,而在于他能操作基本类型值的能理

Boolean类型

Boolean类型是布尔值对应的引用类型,创建Boolean对象 如下

    var booleanObject = new Boolean(true);

Boolean也重写了valueOf、toString方法,valueOf()返回true/false,toString()返回"true"、"false"
7
上图是Boolean引用类型和布尔值的区别,总结就一句话,包装类型是对象

Number类型

Number类型是数值对应的引用类型,创建Number对象 的方法与Boolean类似

var numberObject = new Number(666)

Number也重写了valueOf(),toLocaleString()和toString(),valueOf返回数值,其他两个返回字符串。
Number还提供了一个toFixed()方法,按照传入参数,将返回参数位小数的字符串,并自动四舍五入。
8
Number有提供了一个方法toExponential(),exponential就是指数的意思,所以,该方法会返回指数表示。
如果一个数,在他被使用之前不知道是大还是小,我们称之为薛定谔的数,这个时候不知道用小数还是指数表示那要怎么办呢。
于是乎Number再再提供了一个方法,toPrecision
此方法与tofixed()toExponential()使用一样,也接受一个表示位数的参数,不过这个和之前的不太一样,此处是表示所有位数的参数,请看下图
9

对Number和Boolean类似的,使用typeOf,instanceof也会有类似的结果,因此请不要使用Number对象

String类型

字符串的包装类型,创建方式类似valueOf,toString,toLocaleString全部返回字符串,别问为什么,反正没人看我的博客。
String类型每个实例都有一个length属性,表示字符串中包含的字符个数。
就像下图这样
10

1.字符方法

  • charAt():基于0位置,返回指定位置的字符串单字符(没有字符类型,只有字符串)
  • charCodeAt():基于0位置,返回指定位置字符编码

1
途中第三个方法也能直接访问字符,但是IE7及之前版本不支持

2.字符串方法

  • concat():和数组方法差不多,拼接起来,返回新的字符串(不改变原来字符串,一般不用,直接用+拼接)
  • slice():两个参数,起使位置,结束位置,不指定结束位置默认为字符串长度
  • substring():两个参数,起使位置,结束位置,不指定结束位置默认为字符串长度
  • substr():两个参数,起使位置,截取长度,不指定结束位置默认为字符串长度

slice、substring、substr传入负数的区别如下
slice()会从末尾往前数
substring和substr会转化为0,但可能substring要长一些所以牛逼一些,不管参数顺序(3,0会传回0,3的结果),但substr就不行

2

3.字符串位置方法

indexOf()、lastIndexOf()
都是从一个字符串中查找给定子字符串,返回子字符串位置,未找到返回-1,可选第二个参数为起始位置。
区别是两个查找方向相反

4.trim()

去除字符串前后空格

5.字符串大小转换

toLowerCase()、toLocaleLowerCase():转化为小写字母
toUpperCase()、toLocaleUpperCase():转化为大写字母
加了Locale是针对特定地区的实现,在不知道代码将在哪种语言环境运行的时候推荐加上

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

  • macth()
    本质与RegExp的exec()方法相同,只接受一个正则或者RegExp对象作为参数
    3

  • search()
    参数和马车挺好一样,没找到返回-1,找到返回位置

  • replace()
    用于替换字符串
    两个参数,RegExp对象/字符串(不会被转换成正则表达式),和字符串/函数
    如果第一个参数只是一个字符串则只会替换第一个匹配的结果,但是可以用正则表达式指定全局(g)标志
    4

  • split()
    基于指定分隔符(字符串/正则表达式)将一个字符串分割成多个子字符串,并存放打一个数组中
    第二个可选参数为返回结果数组大小,用来确保返回数组不会超过既定大小
    5
    途中第三个表达式为:非(^)任意多(+)个#
    出现前后两个空格是因为正则表达式的分隔符出现在了字符串首尾(red和yellow)

7.localeCompare()

用于比较两个字符串,返回下列值中的一个

  • 如果字符串再字母表中应该排在字符串参数之前,返回负数(多数为-1)
  • 等于返回0
  • 之后返回正数(多数为1)
    6

8.fromChartCode()

与charCode()相反,编码转化为字符串



收起 >>
第五章 引用类型(6.基本包装类型)