摘要:目錄導語包裝對象的理解三大包裝對象的知識點小結(jié)導語包裝對象是為了彌補基本數(shù)據(jù)類型的非對象特性而產(chǎn)生的,對于基本類型值而言,本來是不存在屬性和方法的,但是我們可以在使用字面量創(chuàng)建字符串時,調(diào)用例如的方法,那么其內(nèi)在原理究竟是什么呢閱讀完本篇文
目錄 導語 1. 包裝對象的理解 2. 三大包裝對象的知識點 3. 小結(jié) 導語
包裝對象是為了彌補基本數(shù)據(jù)類型的非對象特性而產(chǎn)生的,對于基本類型值而言,本來是不存在屬性和方法的,但是我們可以在使用字面量創(chuàng)建字符串時,調(diào)用例如"hello".concat(" world")的方法,那么其內(nèi)在原理究竟是什么呢?
閱讀完本篇文章,相信你能找到答案。
包裝對象指的是數(shù)據(jù)類型為Number、String和Boolean的值對應的原生對象;
三大包裝對象能力在于:
能夠?qū)⑸鲜龌绢愋椭蛋b成真正的對象,從而體現(xiàn)JavaScript語言一切皆對象的特點;
是字面量使用對應包裝對象的方法的內(nèi)在原理;
是進行數(shù)據(jù)類型轉(zhuǎn)換的利器;
1.1 三大包裝對象及其字面量基本數(shù)據(jù)類型我們可以直接采用字面量的形式創(chuàng)建:
var num = 1,str = "hello",bool = true;
也可以采用對應包裝對象的形式創(chuàng)建:
var num = new Number(1),str = new String("hello"),bool = new Boolean(true)
二者區(qū)別在于前者是基本數(shù)據(jù)類型,后者是屬于對象的引用數(shù)據(jù)類型;
二者的聯(lián)系在于:
通過對象的valueOf()方法可以獲取其基本類型值;
字面量可直接調(diào)用包裝對象的實例的方法;
其原理在于每次基本類型字面量在調(diào)用包裝對象實例的方法時,首先創(chuàng)建對于包裝對象的實例,然后在實例上調(diào)用該方法,最后銷毀該實例,即
var str = "hello world"; str.split(" ") 等價于 var str = new String("hello world") str.split(" ") str = null;
所以,每當為字面量賦屬性值時是無效的,因為每次字面量調(diào)用完包裝對象實例的方法后都會銷毀實例;
關(guān)于更多包裝對象的實例屬性和方法詳見下文;
在《JavaScript標準庫系列——Object對象和Array對象(一)》一文中,小羊曾提到Object是其他一切對象的構(gòu)造函數(shù),所以三大包裝對象的實例都可以由Object來構(gòu)造;
var num = new Object(1);等價于 new Number(1) var str = new Object("hello");new String("hello") var bool = new Object(true);new Booleab(true)
Object構(gòu)造函數(shù)根據(jù)傳入?yún)?shù)的數(shù)據(jù)類型返回相應的基本包裝類型的實例;
包裝對象直接作為工具方法實現(xiàn)到不同類型數(shù)據(jù)之間的類型轉(zhuǎn)換作用,詳見《JavaScript數(shù)據(jù)類型(四)》一文;
繼承自Object對象的valeOf()和toString()方法
這兩個方法繼承自Object對象,經(jīng)常在使用字面量與其他類型數(shù)據(jù)進行運算時調(diào)用,例如:
這里順帶講一下+運算符的原理:
先自動轉(zhuǎn)成原始類型的值(即先執(zhí)行該對象的valueOf
方法,如果結(jié)果還不是原始類型的值,再執(zhí)行toString
方法;如果對象是Date實例,則先執(zhí)行toString
方法);
兩個運算子都是原始類型的值以后,只要有一個運算子是字符串,則兩個運算子都轉(zhuǎn)為字符串,執(zhí)行字符串連接運算;
否則,兩個運算子都轉(zhuǎn)為數(shù)值,執(zhí)行加法運算;
來自阮一峰《JavaScript 標準參考教程》;
以1+str、1+obj和1+bool為例:
1+str加法運算符兩側(cè)的運算子包含字符串,采用字符串拼接方法;
1+obj加法運算符兩側(cè)的運算子包含對象,先采用valueOf()方法,發(fā)現(xiàn)還是對象,在調(diào)用toString()方法得到"[object Object]",然后進行字符串拼接;
1+bool發(fā)現(xiàn)其中一個運算子是布爾值直接使用Number()進行包裝;
源自包裝對象實例的方法
三大包裝對象中String對象的實例方法相對來說比較重要,這里重點講一下,其他兩個可以參考阮一峰的教程;
字符方法
charAt():返回指定位置的字符;
charCodeAt():返回給定位置字符的Unicode碼
類數(shù)組方法
length:返回字符串的長度;
concat:合并字符串,返回新字符串,不改變原字符串;
slice:提取字符串,第一個參數(shù)是子字符串的開始位置,第二個參數(shù)是子字符串的結(jié)束位置(不含該位置),返回子字符串,不改變原字符串;
substr:提取字符串,第一個參數(shù)是子字符串的開始位置,第二個參數(shù)是子字符串的長度,返回子字符串,不改變原字符串;
格式化方法
toUpperCase:將字符串變大寫
toLowerCase:將字符串變小寫
trim:去除字符串前后的空格
檢索相關(guān)方法
match:傳入一個參數(shù),若原字符串匹配參數(shù)則返回匹配的符串數(shù)組;
replace:可傳兩個參數(shù),第一個為檢索表達式,第二個為替換值;
更多詳見《JavaScript標準庫系列——RegExp對象(三)》
var str = "hello world" str.split(" ").map(function(ele){ return ele.replace(/^w/,function(match){ return match.toUpperCase() }) }).join(" ") //"Hello World"
split()方法
小結(jié)split:按照給定的參數(shù)去分割字符串,和數(shù)組的join是互為逆方法;
通過全文的瀏覽,我們了解到:
包裝對象是三大原始類型數(shù)據(jù)Number、String和Boolean對于的原生對象;
三大包裝對象在JavaScript中的作用主要是能將三大基本數(shù)據(jù)類型也包裝成對象,從而體現(xiàn)JavaScript一切皆對象的特性;是字面量調(diào)用對應實例方法的內(nèi)在原理;是進行數(shù)據(jù)類型轉(zhuǎn)換的利器;
通過new+包裝對象方法能夠創(chuàng)建不同的包裝對象實例,調(diào)用其valueOf()方法就可以得到對應的原始類型值;同時也可以通過Object對象去構(gòu)造對應的包裝對象;
包裝對象的使用既可以作為工具方法,起到數(shù)據(jù)類型轉(zhuǎn)換作用;又可以創(chuàng)建實例,從而實例可以調(diào)用部署在對應包裝對象原型上的方法;
valueOf()和toString()是三大包裝對象實例的共有方法,在進行數(shù)據(jù)類型轉(zhuǎn)換時會派上用場;
本文主要講解了關(guān)于String包裝對實例的方法,包括字符方法、類數(shù)組方法、格式化方法、檢索方法和split方法;
參考資料《JavaScript高級程序設計(第3版)》
《JavaScript標準參考教程》——阮一峰
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/86729.html
摘要:目錄導語對象對象小結(jié)導語本系列文章將重點講解提供的原生庫標準庫,只要在支持語言的平臺,標準庫中的提供的對象的屬性和方法都能使用對象對象的理解講的標準庫,首先要從對象談起,因為之后的所有對象都可以看做是對象構(gòu)造出來的因此,對象可以看做是一個構(gòu) 目錄 導語 1. Object對象 2. Array對象 3. 小結(jié) 導語 本系列文章將重點講解JavaScript提供的原生庫——標準庫,只要...
摘要:靜態(tài)屬性靜態(tài)方法,,三角函數(shù)方法靜態(tài)屬性對象的靜態(tài)屬性,提供以下一些數(shù)學常數(shù)。以為底的的對數(shù)。的指數(shù)方法返回常數(shù)的參數(shù)次方。四舍五入注意,它對負數(shù)的處理主要是對的處理。 Math是 JavaScript 的原生對象,提供各種數(shù)學功能。該對象不是構(gòu)造函數(shù),不能生成實例,所有的屬性和方法都必須在Math對象上調(diào)用。 靜態(tài)屬性靜態(tài)方法Math.abs()Math.max(),Math.min...
摘要:對象概述作為構(gòu)造函數(shù),它主要用于生成布爾值的包裝對象實例。無輸出上面代碼的第一個例子之所以得到,是因為對應的包裝對象實例是一個對象,進行邏輯運算時,被自動轉(zhuǎn)化成布爾值因為所有對象對應的布爾值都是。 1.Boolean 對 象 1.1概述作為構(gòu)造函數(shù),它主要用于生成布爾值的包裝對象實例。 false對應的包裝對象實例,布爾運算結(jié)果也是true。 if (new Boolean(false...
摘要:對象概述作為構(gòu)造函數(shù),它主要用于生成布爾值的包裝對象實例。無輸出上面代碼的第一個例子之所以得到,是因為對應的包裝對象實例是一個對象,進行邏輯運算時,被自動轉(zhuǎn)化成布爾值因為所有對象對應的布爾值都是。 1.Boolean 對 象 1.1概述作為構(gòu)造函數(shù),它主要用于生成布爾值的包裝對象實例。 false對應的包裝對象實例,布爾運算結(jié)果也是true。 if (new Boolean(false...
摘要:對象概述作為構(gòu)造函數(shù),它主要用于生成布爾值的包裝對象實例。無輸出上面代碼的第一個例子之所以得到,是因為對應的包裝對象實例是一個對象,進行邏輯運算時,被自動轉(zhuǎn)化成布爾值因為所有對象對應的布爾值都是。 1.Boolean 對 象 1.1概述作為構(gòu)造函數(shù),它主要用于生成布爾值的包裝對象實例。 false對應的包裝對象實例,布爾運算結(jié)果也是true。 if (new Boolean(false...
閱讀 1083·2021-11-16 11:45
閱讀 2731·2021-09-27 13:59
閱讀 1327·2021-08-31 09:38
閱讀 3158·2019-08-30 15:52
閱讀 1323·2019-08-29 13:46
閱讀 2095·2019-08-29 11:23
閱讀 1654·2019-08-26 13:47
閱讀 2502·2019-08-26 11:54