原始类型数据是怎么可以调用方法的???
首先我们需要了解一下js中7大原始类型数据
string number boolean bigint symbol null undefined
另外就是要知道像toUpperCase, substr, slice 等方法是存在String对象上面的 那么我们是我们直接定义一个原始类型的变量就可以直接使用该方法呢
const str = 'abc'
str.toUpperCase // 'ABC'
???为什么结果会是这样呢?原始类型数据是怎么可以使用对象的方法的?js在解析代码的时候做了什么?
- 首先简单介绍一下js中的封装类型 2. 封装数据类型 String Number Symbol Boolean Bigint
再看看他的执行顺序
- 字符串
str是一个原始值。因此,在访问其属性时,会创建一个包含字符串字面值的特殊对 象,并且具有可用的方法,例如toUpperCase()。 - 该方法运行并返回一个新的字符串。
- 特殊对象被销毁,只留下原始值
str。 所以原始类型可以提供方法,但它们依然是轻量级的。 JavaScript 引擎高度优化了这个过程。它甚至可能跳过创建额外的对象。但是它仍然必须遵守规范,并且表现得好像它创建了一样。
数字有其自己的方法,例如,toFixed(n) 将数字舍入到给定的精度
特殊的原始类型 null 和 undefined 。它们没有对应的 封装类型,也没有提供任何方法。从某种意义上说,它们是“最原始的”。