溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JavaScript原始包裝類型實(shí)例分析

發(fā)布時(shí)間:2022-05-26 09:41:09 來(lái)源:億速云 閱讀:316 作者:zzz 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“JavaScript原始包裝類型實(shí)例分析”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“JavaScript原始包裝類型實(shí)例分析”吧!

引出問(wèn)題: 如下一段簡(jiǎn)單的代碼,變量a賦予了字符串類型原始值"str",通過(guò)控制臺(tái)打印輸出變量a,只有“str"。a并沒(méi)有定義slice這個(gè)方法,但是后續(xù)為什么變量a可以調(diào)用slice方法呢?

let a = "str";
console.log(a);  // "str"
console.log(a.slice(1))  // "tr"

針對(duì)以上問(wèn)題,需要追溯到JavaScript中的原始包裝類型。

一、原始包裝類型

為了方便操作原始值,ECMAScript提供了3種特殊的引用類型:Boolean、Number 和 String

關(guān)于Boolean、Number 和 String涉及的方法和屬性很多,這里僅介紹三種引用類型的 valueOf() 方法和 toString() 方法。

1、Boolean

創(chuàng)建一個(gè)Boolean類型的對(duì)象實(shí)例時(shí),傳入的參數(shù)按轉(zhuǎn)換為Boolean類型值的規(guī)則確實(shí)是true還是false

(1)valueOf() :返回一個(gè)原始值 true 或者 false

let a = new Boolean(true);
console.log(a.valueOf());  // true

(2)toString() :返回字符串 ‘true' 或者 'false'

let b = new Boolean(false);
console.log(b.toString());  // "false"

2、Number

(1)valueOf() :返回對(duì)象的原始數(shù)值

let a = new Number(12);
console.log(a.valueOf());  // 12

(2)toString() :返回相應(yīng)基數(shù)(進(jìn)制數(shù))的數(shù)值字符串

let b = new Number(123);
console.log(b.toString());  // "123"

3、String

valueOf() 、toString() 和 toLocalString() 都繼承自 Object,均返回對(duì)象的原始字符串值

let a = new String('str');
console.log(a.valueOf());  // str
console.log(a.toString());  // str
console.log(a.toLocaleString());  // str

二、原始包裝類型的特點(diǎn)

1、原始值為什么可以調(diào)用一些方法

let s = "str";
console.log(s.slice(1))  // "tr"

如上代碼,第二行中訪問(wèn)a時(shí),是以讀模式訪問(wèn)的,也就是要從內(nèi)存中讀取變量保存的值。

在以讀模式訪問(wèn)字符串值得任何時(shí)候,后臺(tái)都會(huì)自動(dòng)執(zhí)行以下三步:

(1)根據(jù)字符串值創(chuàng)建一個(gè) String 類型的實(shí)例
(2)調(diào)用實(shí)例上的特定方法
(3)銷毀實(shí)例

即相當(dāng)于執(zhí)行了以下三行代碼:

// 創(chuàng)建String實(shí)例
let s = new String("str");
// 調(diào)用特定方法
s.slice(1)
// 銷毀實(shí)例
s = null

這種行為則讓原始值擁有了對(duì)象的行為。

針對(duì)布爾值和數(shù)值,也會(huì)在后臺(tái)執(zhí)行相同的步驟。

2、引用類型和原始值包裝類型的區(qū)別

引用類型和原始值包裝類型的區(qū)別主要在于對(duì)象的生命周期

  • (1)通過(guò)new實(shí)例化引用類型后,得到的實(shí)例會(huì)在離開(kāi)作用域時(shí)被銷毀

  • (2)自動(dòng)創(chuàng)建的原始值包裝對(duì)象則只會(huì)存在于訪問(wèn)它的那行代碼執(zhí)行期間。(所以運(yùn)行時(shí)并不能給原始值添加屬性和方法)

3、原始包裝類型構(gòu)造函數(shù) 和 轉(zhuǎn)型函數(shù)

以Number為例:

  • (1)如果直接調(diào)用 Number(),執(zhí)行的是 Number()轉(zhuǎn)型函數(shù),強(qiáng)制數(shù)值類型轉(zhuǎn)換

  • (2)如果通過(guò)new 調(diào)用 Number(),執(zhí)行的是 Number() 構(gòu)造函數(shù),創(chuàng)建一個(gè)Number的實(shí)例

let a = Number(1);
console.log(typeof a);   // number
let b = new Number(1);
console.log(typeof b);   // object

感謝各位的閱讀,以上就是“JavaScript原始包裝類型實(shí)例分析”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)JavaScript原始包裝類型實(shí)例分析這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI