JS原始類型為什么能調用方法原理詳解
引言
參考地址:原始類型的方法
假如,有這樣一段代碼,將字符串轉換為大寫:
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())呢?
其原理是:為了使方法起作用,創(chuàng)建了提供額外功能的特殊“對象包裝器”,使用后即被銷毀。
“對象包裝器”對于每種原始類型都是不同的,它們被稱為 String、Number、Boolean、Symbol 和 BigInt。因此,它們提供了不同的方法。
以之前的代碼為例:
let str = 'abc'; str.toUpperCase(); // 'ABC'
實際發(fā)生的情況:
- 字符串
str是一個原始值。因此,在訪問其屬性時,會創(chuàng)建一個包含字符串字面值的特殊對象,并且具有可用的方法,例如toUpperCase()。 - 該方法運行并返回一個新的字符串。
- 特殊對象被銷毀,只留下原始值
str。
所以原始類型可以提供方法,但它們依然是輕量級的。
JavaScript 引擎高度優(yōu)化了這個過程。它甚至可能跳過創(chuàng)建額外的對象。但是它仍然必須遵守規(guī)范,并且表現(xiàn)得好像它創(chuàng)建了一樣。
以上就是JS原始類型為什么能調用方法原理詳解的詳細內容,更多關于JS原始類型調用方法的資料請關注腳本之家其它相關文章!
相關文章
uniApp學習之熱門搜索,搜索數(shù)據(jù)頁面緩存實例
這篇文章主要介紹了uniApp學習之熱門搜索,搜索數(shù)據(jù)頁面緩存實例,需要的朋友可以參考下2023-10-10

