如何理解 JS 基本包装类型

108 阅读2分钟

我正在参加「掘金·启航计划」

什么是基本包装类型

我们都听过基本类型与引用类型的数据,对于基本包装类型可能就有些懵懂了,那到底什么是 基本包装类型 呢?

其实基本包装类型与其他引用类型是相似的,也具有与各自的基本类型相应的行为。 ECMAScript 中提供了 3 个特殊的引用类型:Boolean、Number 和 String。

基本包装类型的实现原理

我们都知道,基本类型值不是对象,因此从逻辑上讲它们不应该有方法。但是我们在使用中发现,它们确实是有方法的,这又是为什么呢?

我们来看这样一个例子:

var s1 = "some text"
var s2 = s1.substring(2)

其实,访问过程处于一种读取模式,也就是要从内存中读取字符串的值,这个过程中后台自动完成了一下处理。

(1)创建 String 类型的一个实例 (2)在实例上调用指定的方法 (3)销毁这个实例

引用类型与基本包装类型的区别

他们之间最大的区别就是对象的生存期。

  • 使用 new 操作符创建的引用类型实例,在执行流离开当前作用域之前都一直保存在内存中。
  • 自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,之后被立即销毁。

这也就是说我们不能在运行时为基本类型的值添加属性和方法。所以一下代码执行有误。

var s1 = 'some text'
s1.color = 'red'
alert(s1.color) // undefined

需要注意的是,使用 new 调用基本包装类型的构造函数,与直接调用同名的转型函数是不一样的。

var value = '24'
var number = Number(value)
alert(typeof number) // 'number'

var obj = new Number(value)
alert(typeof obj) // 'object'

因此,我们不建议直接使用基本包装类型,尤其是 Boolean 与 Number。

而 String 类型,提供了很多方法,用于辅助完成对 ECMAScript 中字符串的解析和操作。

字符方法:

  • charAt(): 返回给定位置的字符
  • charCodeAt():返回给定位置的字符编码

字符串操作方法:

  • concat():拼接字符
  • slice():
  • substr():
  • substring():

字符串位置方法:

  • indexOf()
  • lastIndexOf()

trim():删除前置及后缀的所有空格

转换大小写:

  • toLowerCase()
  • toLocaleLowerCase()
  • toUpperCase()
  • toUpperCase()

模式匹配方法:

  • match()
  • search()
  • replace()
  • split()

比较字符串

  • localeCompare():按字母表