资讯专栏INFORMATION COLUMN

JavaScript标准库系列——三大包装对象(四)

sean / 1992人阅读

摘要:目录导语包装对象的理解三大包装对象的知识点小结导语包装对象是为了弥补基本数据类型的非对象特性而产生的,对于基本类型值而言,本来是不存在属性和方法的,但是我们可以在使用字面量创建字符串时,调用例如的方法,那么其内在原理究竟是什么呢阅读完本篇文

目录 导语 1. 包装对象的理解 2. 三大包装对象的知识点 3. 小结 导语

包装对象是为了弥补基本数据类型的非对象特性而产生的,对于基本类型值而言,本来是不存在属性和方法的,但是我们可以在使用字面量创建字符串时,调用例如"hello".concat(" world")的方法,那么其内在原理究竟是什么呢?
阅读完本篇文章,相信你能找到答案。

1. 包装对象的理解

包装对象指的是数据类型为NumberStringBoolean的值对应的原生对象;
三大包装对象能力在于:

能够将上述基本类型值包装成真正的对象,从而体现JavaScript语言一切皆对象的特点;

是字面量使用对应包装对象的方法的内在原理;

是进行数据类型转换的利器;

1.1 三大包装对象及其字面量

基本数据类型我们可以直接采用字面量的形式创建:

var num = 1,str = "hello",bool = true;

也可以采用对应包装对象的形式创建:

var num = new Number(1),str = new String("hello"),bool = new Boolean(true)

二者区别在于前者是基本数据类型,后者是属于对象的引用数据类型;

二者的联系在于:

通过对象的valueOf()方法可以获取其基本类型值;

字面量可直接调用包装对象的实例的方法;

其原理在于每次基本类型字面量在调用包装对象实例的方法时,首先创建对于包装对象的实例,然后在实例上调用该方法,最后销毁该实例,即

var str = "hello world";
str.split(" ")
等价于
var str = new String("hello world")
str.split(" ")
str = null;

所以,每当为字面量赋属性值时是无效的,因为每次字面量调用完包装对象实例的方法后都会销毁实例;
关于更多包装对象的实例属性和方法详见下文;

1.2 Object对象与三大包装对象的关系

《JavaScript标准库系列——Object对象和Array对象(一)》一文中,小羊曾提到Object是其他一切对象的构造函数,所以三大包装对象的实例都可以由Object来构造;

var num = new Object(1);等价于 new Number(1)
var str = new Object("hello");new String("hello")
var bool = new Object(true);new Booleab(true)


Object构造函数根据传入参数的数据类型返回相应的基本包装类型的实例;

2. 三大包装对象的知识点
2.1 包装对象直接作为工具方法

包装对象直接作为工具方法实现到不同类型数据之间的类型转换作用,详见《JavaScript数据类型(四)》一文;

2.2 包装对象的实例方法

继承自Object对象的valeOf()和toString()方法
这两个方法继承自Object对象,经常在使用字面量与其他类型数据进行运算时调用,例如:


这里顺带讲一下+运算符的原理:

先自动转成原始类型的值(即先执行该对象的valueOf
方法,如果结果还不是原始类型的值,再执行toString

方法;如果对象是Date实例,则先执行toString
方法);

两个运算子都是原始类型的值以后,只要有一个运算子是字符串,则两个运算子都转为字符串,执行字符串连接运算;

否则,两个运算子都转为数值,执行加法运算;
来自阮一峰《JavaScript 标准参考教程》;

1+str1+obj1+bool为例:
1+str加法运算符两侧的运算子包含字符串,采用字符串拼接方法;
1+obj加法运算符两侧的运算子包含对象,先采用valueOf()方法,发现还是对象,在调用toString()方法得到"[object Object]",然后进行字符串拼接;
1+bool发现其中一个运算子是布尔值直接使用Number()进行包装;

源自包装对象实例的方法
三大包装对象中String对象的实例方法相对来说比较重要,这里重点讲一下,其他两个可以参考阮一峰的教程;

字符方法

charAt():返回指定位置的字符;

charCodeAt():返回给定位置字符的Unicode码


类数组方法

length:返回字符串的长度;

concat:合并字符串,返回新字符串,不改变原字符串;
slice:提取字符串,第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置),返回子字符串,不改变原字符串;
substr:提取字符串,第一个参数是子字符串的开始位置,第二个参数是子字符串的长度,返回子字符串,不改变原字符串;

格式化方法

toUpperCase:将字符串变大写

toLowerCase:将字符串变小写
trim:去除字符串前后的空格

检索相关方法

match:传入一个参数,若原字符串匹配参数则返回匹配的符串数组;

replace:可传两个参数,第一个为检索表达式,第二个为替换值;
更多详见《JavaScript标准库系列——RegExp对象(三)》

var str = "hello world"
str.split(" ").map(function(ele){
  return ele.replace(/^w/,function(match){
    return match.toUpperCase()
  })
}).join(" ")
//"Hello World"

split()方法

split:按照给定的参数去分割字符串,和数组的join是互为逆方法;

小结

通过全文的浏览,我们了解到:

包装对象是三大原始类型数据Number、String和Boolean对于的原生对象;

三大包装对象在JavaScript中的作用主要是能将三大基本数据类型也包装成对象,从而体现JavaScript一切皆对象的特性;是字面量调用对应实例方法的内在原理;是进行数据类型转换的利器;

通过new+包装对象方法能够创建不同的包装对象实例,调用其valueOf()方法就可以得到对应的原始类型值;同时也可以通过Object对象去构造对应的包装对象;

包装对象的使用既可以作为工具方法,起到数据类型转换作用;又可以创建实例,从而实例可以调用部署在对应包装对象原型上的方法;

valueOf()和toString()是三大包装对象实例的共有方法,在进行数据类型转换时会派上用场;

本文主要讲解了关于String包装对实例的方法,包括字符方法、类数组方法、格式化方法、检索方法和split方法;

参考资料

《JavaScript高级程序设计(第3版)》

《JavaScript标准参考教程》——阮一峰

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86729.html

相关文章

  • JavaScript标准系列——Object对象和Array对象(一)

    摘要:目录导语对象对象小结导语本系列文章将重点讲解提供的原生库标准库,只要在支持语言的平台,标准库中的提供的对象的属性和方法都能使用对象对象的理解讲的标准库,首先要从对象谈起,因为之后的所有对象都可以看做是对象构造出来的因此,对象可以看做是一个构 目录 导语 1. Object对象 2. Array对象 3. 小结 导语 本系列文章将重点讲解JavaScript提供的原生库——标准库,只要...

    Scholer 评论0 收藏0
  • 标准(七)包装对象math

    摘要:静态属性静态方法,,三角函数方法静态属性对象的静态属性,提供以下一些数学常数。以为底的的对数。的指数方法返回常数的参数次方。四舍五入注意,它对负数的处理主要是对的处理。 Math是 JavaScript 的原生对象,提供各种数学功能。该对象不是构造函数,不能生成实例,所有的属性和方法都必须在Math对象上调用。 静态属性静态方法Math.abs()Math.max(),Math.min...

    ShevaKuilin 评论0 收藏0
  • 标准包装对象二number

    摘要:对象概述作为构造函数,它主要用于生成布尔值的包装对象实例。无输出上面代码的第一个例子之所以得到,是因为对应的包装对象实例是一个对象,进行逻辑运算时,被自动转化成布尔值因为所有对象对应的布尔值都是。 1.Boolean 对 象 1.1概述作为构造函数,它主要用于生成布尔值的包装对象实例。 false对应的包装对象实例,布尔运算结果也是true。 if (new Boolean(false...

    MAX_zuo 评论0 收藏0
  • 标准包装对象二number

    摘要:对象概述作为构造函数,它主要用于生成布尔值的包装对象实例。无输出上面代码的第一个例子之所以得到,是因为对应的包装对象实例是一个对象,进行逻辑运算时,被自动转化成布尔值因为所有对象对应的布尔值都是。 1.Boolean 对 象 1.1概述作为构造函数,它主要用于生成布尔值的包装对象实例。 false对应的包装对象实例,布尔运算结果也是true。 if (new Boolean(false...

    li21 评论0 收藏0
  • 标准包装对象二number

    摘要:对象概述作为构造函数,它主要用于生成布尔值的包装对象实例。无输出上面代码的第一个例子之所以得到,是因为对应的包装对象实例是一个对象,进行逻辑运算时,被自动转化成布尔值因为所有对象对应的布尔值都是。 1.Boolean 对 象 1.1概述作为构造函数,它主要用于生成布尔值的包装对象实例。 false对应的包装对象实例,布尔运算结果也是true。 if (new Boolean(false...

    ASCH 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<