摘要:所謂包裝對象,指的是與數(shù)值字符串布爾值分別相對應(yīng)的三個原生對象。引擎自動將其轉(zhuǎn)為包裝對象,在這個對象上調(diào)用屬性。調(diào)用結(jié)束后,這個臨時對象就會被銷毀自動轉(zhuǎn)換生成的包裝對象是只讀的,無法修改。
所謂“包裝對象”,指的是與數(shù)值、字符串、布爾值分別相對應(yīng)的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
目的
使得原始類型的值也有辦法調(diào)用自己的方法。
這三個對象作為構(gòu)造函數(shù)使用(帶有new)時,可以將原始類型的值轉(zhuǎn)為對象;作為普通函數(shù)使用時(不帶有new),可以將任意類型的值,轉(zhuǎn)為原始類型的值
2.實(shí)例方法
三種包裝對象各自提供了許多實(shí)例方法,詳見后文。這里介紹兩種它們共同具有、從Object對象繼承的方法:valueOf()和toString()
2.1valueOf()
valueOf()方法返回包裝對象實(shí)例對應(yīng)的原始類型的值。
new Number(123).valueOf() // 123
new String("abc").valueOf() // "abc"
new Boolean(true).valueOf() // true
toString()
2.2toString()方法返回對應(yīng)的字符串形式。
new Number(123).toString() // "123"
new String("abc").toString() // "abc"
new Boolean(true).toString() // "true"
3原始類型與實(shí)例對象的自動轉(zhuǎn)換
某些場合,原始類型的值會自動當(dāng)作包裝對象調(diào)用,即調(diào)用包裝對象的屬性和方法。這時,JavaScript 引擎會自動將原始類型的值轉(zhuǎn)為包裝對象實(shí)例,并在使用后立刻銷毀實(shí)例。
比如,字符串可以調(diào)用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是一個字符串,本身不是對象,不能調(diào)用length屬性。JavaScript 引擎自動將其轉(zhuǎn)為包裝對象,在這個對象上調(diào)用length屬性。調(diào)用結(jié)束后,這個臨時對象就會被銷毀
3.1自動轉(zhuǎn)換生成的包裝對象是只讀的,無法修改。所以,字符串無法添加新屬性。
var s = "Hello World";
s.x = 123;
s.x // undefined
上面代碼為字符串s添加了一個x屬性,結(jié)果無效,總是返回undefined
3.2調(diào)用結(jié)束后,包裝對象實(shí)例會自動銷毀。這意味著,下一次調(diào)用字符串的屬性時,實(shí)際是調(diào)用一個新生成的對象,而不是上一次調(diào)用時生成的那個對象,所以取不到賦值在上一個對象的屬性。如果要為字符串添加屬性,只有在它的原型對象String.prototype上定義
4自定義方法
除了原生的實(shí)例方法,包裝對象還可以自定義方法和屬性,供原始類型的值直接調(diào)用。
比如,我們可以新增一個double方法,使得字符串和數(shù)字翻倍。
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這兩個對象的原型上面,分別自定義了一個方法,從而可以在所有實(shí)例對象上調(diào)用。注意,最后一張的123外面必須要加上圓括號,否則后面的點(diǎn)運(yùn)算符(.)會被解釋成小數(shù)點(diǎn)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/105892.html
摘要:所謂包裝對象,指的是與數(shù)值字符串布爾值分別相對應(yīng)的三個原生對象。引擎自動將其轉(zhuǎn)為包裝對象,在這個對象上調(diào)用屬性。調(diào)用結(jié)束后,這個臨時對象就會被銷毀自動轉(zhuǎn)換生成的包裝對象是只讀的,無法修改。 所謂包裝對象,指的是與數(shù)值、字符串、布爾值分別相對應(yīng)的Number、String、Boolean三個原生對象。這三個原生對象可以把原始類型的值變成(包裝成)對象 var v1 = new Numbe...
摘要:所謂包裝對象,指的是與數(shù)值字符串布爾值分別相對應(yīng)的三個原生對象。引擎自動將其轉(zhuǎn)為包裝對象,在這個對象上調(diào)用屬性。調(diào)用結(jié)束后,這個臨時對象就會被銷毀自動轉(zhuǎn)換生成的包裝對象是只讀的,無法修改。 所謂包裝對象,指的是與數(shù)值、字符串、布爾值分別相對應(yīng)的Number、String、Boolean三個原生對象。這三個原生對象可以把原始類型的值變成(包裝成)對象 var v1 = new Numbe...
摘要:所謂包裝對象,指的是與數(shù)值字符串布爾值分別相對應(yīng)的三個原生對象。引擎自動將其轉(zhuǎn)為包裝對象,在這個對象上調(diào)用屬性。調(diào)用結(jié)束后,這個臨時對象就會被銷毀自動轉(zhuǎn)換生成的包裝對象是只讀的,無法修改。 所謂包裝對象,指的是與數(shù)值、字符串、布爾值分別相對應(yīng)的Number、String、Boolean三個原生對象。這三個原生對象可以把原始類型的值變成(包裝成)對象 var v1 = new Numbe...
摘要:目錄導(dǎo)語包裝對象的理解三大包裝對象的知識點(diǎn)小結(jié)導(dǎo)語包裝對象是為了彌補(bǔ)基本數(shù)據(jù)類型的非對象特性而產(chǎn)生的,對于基本類型值而言,本來是不存在屬性和方法的,但是我們可以在使用字面量創(chuàng)建字符串時,調(diào)用例如的方法,那么其內(nèi)在原理究竟是什么呢閱讀完本篇文 目錄 導(dǎo)語 1. 包裝對象的理解 2. 三大包裝對象的知識點(diǎn) 3. 小結(jié) 導(dǎo)語 包裝對象是為了彌補(bǔ)基本數(shù)據(jù)類型的非對象特性而產(chǎn)生的,對于基本類型...
摘要:對象概述作為構(gòu)造函數(shù),它主要用于生成布爾值的包裝對象實(shí)例。無輸出上面代碼的第一個例子之所以得到,是因?yàn)閷?yīng)的包裝對象實(shí)例是一個對象,進(jìn)行邏輯運(yùn)算時,被自動轉(zhuǎn)化成布爾值因?yàn)樗袑ο髮?yīng)的布爾值都是。 1.Boolean 對 象 1.1概述作為構(gòu)造函數(shù),它主要用于生成布爾值的包裝對象實(shí)例。 false對應(yīng)的包裝對象實(shí)例,布爾運(yùn)算結(jié)果也是true。 if (new Boolean(false...
閱讀 844·2019-08-30 15:54
閱讀 3316·2019-08-29 15:33
閱讀 2701·2019-08-29 13:48
閱讀 1212·2019-08-26 18:26
閱讀 3333·2019-08-26 13:55
閱讀 1475·2019-08-26 10:45
閱讀 1163·2019-08-26 10:19
閱讀 305·2019-08-26 10:16