参考地址:原始类型的方法
假如,有这样一段代码,将字符串转换为大写:
let str = 'abc';
str.toUpperCase(); // 'ABC'
这是一段简单又普通的代码,按说str
是字符串类型,它存储的是一个单值,并且是不可变的,它不能像对象那样,可以存储多个属性,像这样:
let user = {};
user.name = '张三';
user.say = function () {
return '你好';
};
user.name; // 张三
user.say(); // 你好
通过代码可以看到,不能给普通类型添加属性
let user = '';
user.name = '张三';
user.say = function () {
return '你好';
};
user.age; // undefined
user.say(); // user.say is not a function
那么,为什么原始类型(比如字符串)能够调用方法(比如toUpperCase()
)呢?其原理是:为了使方法起作用,创建了提供额外功能的特殊“对象包装器”,使用后即被销毁。
“对象包装器”对于每种原始类型都是不同的,它们被称为 String
、Number
、Boolean
、Symbol
和 BigInt
。因此,它们提供了不同的方法。
以之前的代码为例:
let str = 'abc';
str.toUpperCase(); // 'ABC'
实际发生的情况:
- 字符串
str
是一个原始值。因此,在访问其属性时,会创建一个包含字符串字面值的特殊对象,并且具有可用的方法,例如toUpperCase()
。 - 该方法运行并返回一个新的字符串。
- 特殊对象被销毁,只留下原始值
str
。
所以原始类型可以提供方法,但它们依然是轻量级的。
JavaScript 引擎高度优化了这个过程。它甚至可能跳过创建额外的对象。但是它仍然必须遵守规范,并且表现得好像它创建了一样。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
文章目录 引 说明 配置联系人 创建告警联系人 添加Webhook集成 配置模板 内容模板 行动策略 创建告警 新建告警 从图表添加到告警 告警列表 触发告警 短信 钉钉 手机 电脑 控制台 处理告警 短信 钉钉 设置处理人 引服务器托管,北京服务器托管,服务…