JS原始類(lèi)型為什么能調(diào)用方法原理詳解
引言
參考地址:原始類(lèi)型的方法
假如,有這樣一段代碼,將字符串轉(zhuǎn)換為大寫(xiě):
let str = 'abc'; str.toUpperCase(); // 'ABC'
存儲(chǔ)多個(gè)屬性
這是一段簡(jiǎn)單又普通的代碼,按說(shuō)str是字符串類(lèi)型,它存儲(chǔ)的是一個(gè)單值,并且是不可變的,它不能像對(duì)象那樣,可以存儲(chǔ)多個(gè)屬性,像這樣:
let user = {};
user.name = '張三';
user.say = function () {
return '你好';
};
user.name; // 張三
user.say(); // 你好不能給普通類(lèi)型添加屬性
通過(guò)代碼可以看到,不能給普通類(lèi)型添加屬性
let user = '';
user.name = '張三';
user.say = function () {
return '你好';
};
user.age; // undefined
user.say(); // user.say is not a function那么,為什么原始類(lèi)型(比如字符串)能夠調(diào)用方法(比如toUpperCase())呢?
其原理是:為了使方法起作用,創(chuàng)建了提供額外功能的特殊“對(duì)象包裝器”,使用后即被銷(xiāo)毀。
“對(duì)象包裝器”對(duì)于每種原始類(lèi)型都是不同的,它們被稱(chēng)為 String、Number、Boolean、Symbol 和 BigInt。因此,它們提供了不同的方法。
以之前的代碼為例:
let str = 'abc'; str.toUpperCase(); // 'ABC'
實(shí)際發(fā)生的情況:
- 字符串
str是一個(gè)原始值。因此,在訪(fǎng)問(wèn)其屬性時(shí),會(huì)創(chuàng)建一個(gè)包含字符串字面值的特殊對(duì)象,并且具有可用的方法,例如toUpperCase()。 - 該方法運(yùn)行并返回一個(gè)新的字符串。
- 特殊對(duì)象被銷(xiāo)毀,只留下原始值
str。
所以原始類(lèi)型可以提供方法,但它們依然是輕量級(jí)的。
JavaScript 引擎高度優(yōu)化了這個(gè)過(guò)程。它甚至可能跳過(guò)創(chuàng)建額外的對(duì)象。但是它仍然必須遵守規(guī)范,并且表現(xiàn)得好像它創(chuàng)建了一樣。
以上就是JS原始類(lèi)型為什么能調(diào)用方法原理詳解的詳細(xì)內(nèi)容,更多關(guān)于JS原始類(lèi)型調(diào)用方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
微信小程序獲取用戶(hù)openId的實(shí)現(xiàn)方法
這篇文章主要介紹了微信小程序獲取用戶(hù)openId的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2017-05-05
微信小程序 設(shè)置啟動(dòng)頁(yè)面的兩種方法
這篇文章主要介紹了 微信小程序 設(shè)置啟動(dòng)頁(yè)面的方法的相關(guān)資料,這里對(duì)設(shè)置啟動(dòng)頁(yè)面的兩種方法分別介紹,需要的朋友可以參考下2017-03-03
uniApp學(xué)習(xí)之熱門(mén)搜索,搜索數(shù)據(jù)頁(yè)面緩存實(shí)例
這篇文章主要介紹了uniApp學(xué)習(xí)之熱門(mén)搜索,搜索數(shù)據(jù)頁(yè)面緩存實(shí)例,需要的朋友可以參考下2023-10-10
一篇文章學(xué)會(huì)jsBridge的運(yùn)行機(jī)制
JSBridge是一座用JavaScript搭建起來(lái)的橋,搭建這座橋的目的也很簡(jiǎn)單,讓native可以調(diào)用web的js代碼,讓web可以 “調(diào)用” 原生的代碼。本文主要通過(guò)分析源碼講解jsBridge的運(yùn)行機(jī)制,感興趣的朋友一起來(lái)看看吧2021-09-09
js類(lèi)型判斷內(nèi)部實(shí)現(xiàn)原理示例詳解
這篇文章主要為大家介紹了js類(lèi)型判斷內(nèi)部實(shí)現(xiàn)原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
微信小程序本作用域下調(diào)用全局JS詳解及實(shí)例
這篇文章主要介紹了微信小程序本作用域下調(diào)用全局JS詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-02-02
electron渲染進(jìn)程主進(jìn)程相互傳值示例解析
這篇文章主要為大家介紹了electron渲染進(jìn)程主進(jìn)程相互傳值示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Javascript 常見(jiàn)的高階函數(shù)詳情
這篇文章主要介紹了Javascript 常見(jiàn)的高階函數(shù)的相關(guān)資料,高階函數(shù),英文叫 Higher Order function。一個(gè)函數(shù)可以接收另外一個(gè)函數(shù)作為參數(shù),這種函數(shù)就叫做高階函數(shù),需要的朋友可以參考一下2021-09-09
vue框架通用化解決個(gè)性化文字換行問(wèn)題實(shí)例詳解
這篇文章主要為大家介紹了通用化解決個(gè)性化文字換行問(wèn)題實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09

