左小白的技术日常
Github

字符串原始类型不是对象,为什么可以使用点语法运行方法

这篇文章发布于 2020/12/30,归类于
标签:
基本包装类型原始类型不是对象为什么可以执行方法

理论上,原始值本身不是对象,逻辑上是不能有属性、方法的。那为什么字符串可以使用点语法执行 substring 等方法呢?下面的例子中,第 2 行可以正常执行。主要是 JS 内部在后台进行了一些处理

let s1 = "some text"
let s2 = s1.substring(2) // "me text"

在执行到第 2 行时

  1. 临时创建一个 String 类型的实例 let t = new String("some text")
  2. 调用实例上的特定方法 s2 = t.substring(2)
  3. 销毁实例 t = null

这种行为可以让原始值拥有对象的行为。临时创建的 原始值包装类型(String)实例的声明周期只在执行的那一行。执行完后,就销毁了。下面的例子即可说明这个问题。

let s1 = "some text"
s1.color = "red"
console.log(s1.color) // undefined

更多详情参考:《JavaScript高级程序设计》第四版 p113 原始值包装类型。在线笔记 原始值包装类型(基本包装类型) - 5. 基本引用类型 - JS高程4 | 左小白的前端笔记