摘要:所謂包裝對象,指的是與數值字符串布爾值分別相對應的三個原生對象。引擎自動將其轉為包裝對象,在這個對象上調用屬性。調用結束后,這個臨時對象就會被銷毀自動轉換生成的包裝對象是只讀的,無法修改。
所謂“包裝對象”,指的是與數值、字符串、布爾值分別相對應的Number、String、Boolean三個原生對象。這三個原生對象可以把原始類型的值變成(包裝成)對象
var v1 = new Number(123);
var v2 = new String("abc");
var v3 = new Boolean(true);
typeof v1 // "object"
typeof v2 // "object"
typeof v3 // "object"
v1 === 123 // false
v2 === "abc" // false
v3 === true // false
目的
使得原始類型的值也有辦法調用自己的方法。
這三個對象作為構造函數使用(帶有new)時,可以將原始類型的值轉為對象;作為普通函數使用時(不帶有new),可以將任意類型的值,轉為原始類型的值
2.實例方法
三種包裝對象各自提供了許多實例方法,詳見后文。這里介紹兩種它們共同具有、從Object對象繼承的方法:valueOf()和toString()
2.1valueOf()
valueOf()方法返回包裝對象實例對應的原始類型的值。
new Number(123).valueOf() // 123
new String("abc").valueOf() // "abc"
new Boolean(true).valueOf() // true
toString()
2.2toString()方法返回對應的字符串形式。
new Number(123).toString() // "123"
new String("abc").toString() // "abc"
new Boolean(true).toString() // "true"
3原始類型與實例對象的自動轉換
某些場合,原始類型的值會自動當作包裝對象調用,即調用包裝對象的屬性和方法。這時,JavaScript 引擎會自動將原始類型的值轉為包裝對象實例,并在使用后立刻銷毀實例。
比如,字符串可以調用length屬性,返回字符串的長度。
var str = "abc";
str.length // 3
// 等同于
var strObj = new String(str)
// String {
// 0: "a", 1: "b", 2: "c", length: 3, [[PrimitiveValue]]: "abc"
// }
strObj.length // 3
上面代碼中,abc是一個字符串,本身不是對象,不能調用length屬性。JavaScript 引擎自動將其轉為包裝對象,在這個對象上調用length屬性。調用結束后,這個臨時對象就會被銷毀
3.1自動轉換生成的包裝對象是只讀的,無法修改。所以,字符串無法添加新屬性。
var s = "Hello World";
s.x = 123;
s.x // undefined
上面代碼為字符串s添加了一個x屬性,結果無效,總是返回undefined
3.2調用結束后,包裝對象實例會自動銷毀。這意味著,下一次調用字符串的屬性時,實際是調用一個新生成的對象,而不是上一次調用時生成的那個對象,所以取不到賦值在上一個對象的屬性。如果要為字符串添加屬性,只有在它的原型對象String.prototype上定義
4自定義方法
除了原生的實例方法,包裝對象還可以自定義方法和屬性,供原始類型的值直接調用。
比如,我們可以新增一個double方法,使得字符串和數字翻倍。
String.prototype.double = function () {
return this.valueOf() + this.valueOf();
};
"abc".double()
// abcabc
Number.prototype.double = function () {
return this.valueOf() + this.valueOf();
};
(123).double() // 246
上面代碼在String和Number這兩個對象的原型上面,分別自定義了一個方法,從而可以在所有實例對象上調用。注意,最后一張的123外面必須要加上圓括號,否則后面的點運算符(.)會被解釋成小數點。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105893.html
摘要:所謂包裝對象,指的是與數值字符串布爾值分別相對應的三個原生對象。引擎自動將其轉為包裝對象,在這個對象上調用屬性。調用結束后,這個臨時對象就會被銷毀自動轉換生成的包裝對象是只讀的,無法修改。 所謂包裝對象,指的是與數值、字符串、布爾值分別相對應的Number、String、Boolean三個原生對象。這三個原生對象可以把原始類型的值變成(包裝成)對象 var v1 = new Numbe...
摘要:所謂包裝對象,指的是與數值字符串布爾值分別相對應的三個原生對象。引擎自動將其轉為包裝對象,在這個對象上調用屬性。調用結束后,這個臨時對象就會被銷毀自動轉換生成的包裝對象是只讀的,無法修改。 所謂包裝對象,指的是與數值、字符串、布爾值分別相對應的Number、String、Boolean三個原生對象。這三個原生對象可以把原始類型的值變成(包裝成)對象 var v1 = new Numbe...
摘要:所謂包裝對象,指的是與數值字符串布爾值分別相對應的三個原生對象。引擎自動將其轉為包裝對象,在這個對象上調用屬性。調用結束后,這個臨時對象就會被銷毀自動轉換生成的包裝對象是只讀的,無法修改。 所謂包裝對象,指的是與數值、字符串、布爾值分別相對應的Number、String、Boolean三個原生對象。這三個原生對象可以把原始類型的值變成(包裝成)對象 var v1 = new Numbe...
摘要:目錄導語包裝對象的理解三大包裝對象的知識點小結導語包裝對象是為了彌補基本數據類型的非對象特性而產生的,對于基本類型值而言,本來是不存在屬性和方法的,但是我們可以在使用字面量創建字符串時,調用例如的方法,那么其內在原理究竟是什么呢閱讀完本篇文 目錄 導語 1. 包裝對象的理解 2. 三大包裝對象的知識點 3. 小結 導語 包裝對象是為了彌補基本數據類型的非對象特性而產生的,對于基本類型...
摘要:對象概述作為構造函數,它主要用于生成布爾值的包裝對象實例。無輸出上面代碼的第一個例子之所以得到,是因為對應的包裝對象實例是一個對象,進行邏輯運算時,被自動轉化成布爾值因為所有對象對應的布爾值都是。 1.Boolean 對 象 1.1概述作為構造函數,它主要用于生成布爾值的包裝對象實例。 false對應的包裝對象實例,布爾運算結果也是true。 if (new Boolean(false...
閱讀 623·2023-04-26 01:53
閱讀 2748·2021-11-17 17:00
閱讀 2879·2021-09-04 16:40
閱讀 1983·2021-09-02 15:41
閱讀 830·2019-08-26 11:34
閱讀 1222·2019-08-26 10:16
閱讀 1334·2019-08-23 17:51
閱讀 814·2019-08-23 16:50