摘要:今天把接下來(lái)引用類(lèi)型中的一些內(nèi)容全部記錄完畢基本包裝類(lèi)型為了便于操作基本類(lèi)型值,還提供了種特殊的引用類(lèi)型。這三種類(lèi)型具有與各自的基本類(lèi)型響應(yīng)的特殊行為。重寫(xiě)后的返回對(duì)象表示的數(shù)值類(lèi)型,另外兩個(gè)方法則返回字符串形式的數(shù)值。
今天把接下來(lái)引用類(lèi)型中的一些內(nèi)容全部記錄完畢~
基本包裝類(lèi)型為了便于操作基本類(lèi)型值,JavaScript還提供了3種特殊的引用類(lèi)型:Boolean, Number, String。這三種類(lèi)型具有與各自的基本類(lèi)型響應(yīng)的特殊行為。
實(shí)際上每當(dāng)讀取一個(gè)基本類(lèi)型值得時(shí)候,后臺(tái)就會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)的基本包裝類(lèi)型的對(duì)象。從而可以調(diào)用一些方法來(lái)操作這些數(shù)據(jù)。
var s1 = "some text" var s2 = s1.substring(2)
如上,s1包含一個(gè)字符串,字符串應(yīng)該是基本類(lèi)型的,而下一行調(diào)用了s1的substring方法,并保存在了s2中。但是一般只有對(duì)象才具有方法,s1是一個(gè)基本類(lèi)型的字符串是不應(yīng)該具有這個(gè)特性的,那么是為什么呢?
這是因?yàn)樵L問(wèn)s1的時(shí)候處于一種讀取模式,也就是要從內(nèi)存中讀取這個(gè)字符串的值,然而在讀取模式中訪問(wèn)這個(gè)字符串時(shí)后臺(tái)都會(huì)進(jìn)行如下操作:
1. 創(chuàng)建一個(gè)String類(lèi)型的實(shí)例 2. 在實(shí)例上調(diào)用指定方法 3. 銷(xiāo)毀這個(gè)實(shí)例
經(jīng)過(guò)這樣的處理,基本的字符串值就變得跟對(duì)象一樣了。
既然基本包裝類(lèi)型和引用類(lèi)型這么相似,那么他們之間的區(qū)別在哪里? 引用類(lèi)型和包裝類(lèi)型的主要區(qū)別是在對(duì)象的生存期。
使用new操作符創(chuàng)建的引用類(lèi)型的實(shí)例,在執(zhí)行流離開(kāi)當(dāng)前作用域之前都一直保存在內(nèi)存中。而自動(dòng)創(chuàng)建的基本包裝類(lèi)型的對(duì)象,則只存在于代碼執(zhí)行的瞬間,然后立馬被銷(xiāo)毀,這就意味著我們不能在運(yùn)行時(shí)為基本類(lèi)型添加屬性和方法。
因?yàn)橛辛嘶景b類(lèi)型對(duì)象,雖然我們可以顯示的創(chuàng)建String,Number,Boolean創(chuàng)建包裝類(lèi)型的對(duì)象,但是我們不建議這樣去做,因?yàn)檫@樣很容易把自己弄混淆,不知道自己在處理基本類(lèi)型還是引用類(lèi)型的值,
Object構(gòu)造函數(shù)會(huì)像工廠方法一樣,根據(jù)傳入的值得類(lèi)型返回對(duì)應(yīng)基本包裝類(lèi)型的實(shí)例。
var obj = new Object("text") //創(chuàng)建了一個(gè)string實(shí)例 console.log(obj instanceOf String) //true
Boolean
Boolean算是比較簡(jiǎn)單的,不需要過(guò)得的介紹,但是有一點(diǎn)是值得我們?nèi)プ⒁獾摹?/p>
因?yàn)槭紫任覀円?strong>布爾表達(dá)式中所有的對(duì)象都會(huì)被轉(zhuǎn)為true,看下面一個(gè)例子:
var f = new Boolean(false) var res = f && true; console.log(f) //false console.log(res) //true var f = false var res = f && true console.lo(res) //false
而且基本類(lèi)型和引用類(lèi)型的布爾值還有兩個(gè)區(qū)別:
var f = false var f1 = new Boolean(false) typeof f //"boolean" typeof f1 // "object" f instanceOf Boolean // false f1 instanceOf Boolean //true
Number類(lèi)型
接下來(lái)再看下Number類(lèi)型,Number類(lèi)型也改寫(xiě)了原來(lái)的toString(),valueOf(),toLocaleString()方法。重寫(xiě)后的valueOf()返回對(duì)象表示的數(shù)值類(lèi)型,另外兩個(gè)方法則返回字符串形式的數(shù)值。我們還可以給toString()方法傳遞一個(gè)表示基數(shù)的參數(shù),告訴它返回幾進(jìn)制數(shù)值的字符串形式。
var num = 10 console.log(num.toSting()) //10 console.log(num.toSting(2)) //1010
除了繼承的方法外,Number還提供了一些用于將數(shù)值格式化為字符串的方法:
var num = 10 console.log(num.toFixed(2)) // "10.00"
另外可以格式化數(shù)值的方法是toExponential(),該方法返回以指數(shù)表示法,表示的數(shù)值的字符串形式,
var num = 10 console.log(num.toExponential(1)) //"1.0e + 1"
String類(lèi)型
String類(lèi)型是字符串的對(duì)象包裝類(lèi)型。String對(duì)象的方法可以在所有基本的字符串值中訪問(wèn)到,其中繼承的valueOf,toString, toLocaleString都是返回基本的字符串。
String類(lèi)型的每個(gè)實(shí)例都有一個(gè)length屬性,表示字符串中包含多少個(gè)字符。
var str = "abc" console.log(str.length) //3
接下來(lái)介紹一些字符串的方法:
兩個(gè)用于訪問(wèn)字符串中特定字符的方法,這兩個(gè)方法都接受一個(gè)基于0的參數(shù),即表示字符基于0的位置。charAt以單字符傳形式返回給定位置的那個(gè)字符串。
var str = "hello" console.log(str.charAt(1)) // "e",如果傳入負(fù)數(shù)或大于字符串長(zhǎng)度的數(shù)字則返回undefined
如果你想獲得到的不是該位置上的字符,而是該字符編碼:
var str = "hello world" console.log(str.charCodeAt(1)) //"101",如果不存在的話返回NAN
(1). concat()
創(chuàng)建一個(gè)字符串副本,然后用該副本將一個(gè)或多個(gè)字符串拼接起來(lái)返回一個(gè)新的字符串:
var str = "hello" var res = str.concat(" world", "!") console.log(res) //"hello world!" console.log(str) //"hello"
基于子字符串副本創(chuàng)建新字符串的方法,這個(gè)三個(gè)方法都接受兩個(gè)參數(shù),slice和substring的第二個(gè)參數(shù)都表示子字符串到哪里結(jié)束,而substr規(guī)定的是返回的字符串個(gè)數(shù)。如果沒(méi)有傳入第二個(gè)參數(shù),則將字符串的末尾作為結(jié)束為止,和concat一樣,這三個(gè)方法都不會(huì)修改字符串本身。
var str = "hello world" console.log(str.slice(3)) //"lo world" console.log(str.substring(3))// "lo world" console.log(str.substr(3)) //"lo world" console.log(str.slice(3, 7)) //"lo w" console.log(str.substring(3, 7)) //"lo w" console.log(str.substr(3, 7)) //"lo worl"
有一種特殊的情況,就是當(dāng)我們傳入帶有負(fù)數(shù)的時(shí)候,就有所差異了:
傳入到slice中的負(fù)數(shù)會(huì)從字符串后端開(kāi)始數(shù)。
substr的第一個(gè)負(fù)數(shù)會(huì)從字符串尾部開(kāi)始數(shù),第二個(gè)如果是負(fù)數(shù)的話會(huì)轉(zhuǎn)為0。
substring會(huì)把所有負(fù)數(shù)都轉(zhuǎn)為0,若果第二個(gè)參數(shù)比第一個(gè)小的話會(huì)調(diào)換兩個(gè)參數(shù)位置:
var str = "hello world" console.log(str.slice(-3)) //"rld" console.log(str.substring(-3)) //"hello world" console.log(str.substr(-3)) //"rld" console.log(str.slice(3, -4)) //"lo w" console.log(str.substring(3, -4)) //"hel" console.log(str.substr(3, -4)) //""
有兩個(gè)可以從字符串中查找子字符串的方法:indexOf()和lastIndexOf().這兩個(gè)方法都是從一個(gè)字符串中搜索給定的子字符串,然后返回子字符串的位置,如果沒(méi)有找到子字符串,則返回-1。這兩個(gè)方法的區(qū)別就是indexOf是從字符串的頭部進(jìn)行搜索,而lastIndexOf是從字符串末尾位置向前搜索。
var str = "hello world" console.log(str.indexOf("o")) //4 console.log(str.lastIndexOf("o")) //7
這兩個(gè)方法都可以接受第二個(gè)參數(shù),表示是從哪個(gè)位置進(jìn)行查找。
var str = "hello world" console.log(str.indexOf("o", 6)) //7 console.log("o", 6) // 4
該方法會(huì)創(chuàng)建一個(gè)字符串的副本,刪除前置以及后綴的所有空格:
var str = " hello world " var trimStr = str.trim() console.log(str) // " hello world " console.log(trimStr) //"hello world"
toLowerCase(), toUpperCase(), toLocaleLowerCase(), toLocaleUpperCase()
這些都是比較簡(jiǎn)單常見(jiàn)的就不一一介紹了~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/88701.html
摘要:內(nèi)存泄露內(nèi)存泄露概念在計(jì)算機(jī)科學(xué)中,內(nèi)存泄漏指由于疏忽或錯(cuò)誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存。判斷內(nèi)存泄漏,以字段為準(zhǔn)。 本文是 重溫基礎(chǔ) 系列文章的第二十二篇。 今日感受:優(yōu)化學(xué)習(xí)方法。 系列目錄: 【復(fù)習(xí)資料】ES6/ES7/ES8/ES9資料整理(個(gè)人整理) 【重溫基礎(chǔ)】1-14篇 【重溫基礎(chǔ)】15.JS對(duì)象介紹 【重溫基礎(chǔ)】16.JSON對(duì)象介紹 【重溫基礎(chǔ)】1...
摘要:作用域鏈?zhǔn)潜WC對(duì)執(zhí)行環(huán)境有權(quán)訪問(wèn)的所有變量和函數(shù)的有序訪問(wèn)。如上,包含的作用域鏈包含它自己的變量對(duì)象和全局環(huán)境的變量對(duì)象,為什么能在函數(shù)內(nèi)訪問(wèn),這就是通過(guò)作用域鏈找的。 前言JavaScript的變量類(lèi)型是弱類(lèi)型的,在特定的時(shí)間內(nèi)保存一個(gè)特定的值,變量的值和數(shù)據(jù)類(lèi)型可以在腳本的生命周期內(nèi)隨意改變。 1. 基本類(lèi)型和引用類(lèi)型的值 JavaScript包含兩種不同類(lèi)型的值:基本類(lèi)型和引用類(lèi)...
摘要:創(chuàng)建一個(gè)日期對(duì)象中國(guó)標(biāo)準(zhǔn)時(shí)間在調(diào)用構(gòu)造函數(shù)而不傳參數(shù)的情況下,新創(chuàng)建的對(duì)象自動(dòng)獲得當(dāng)前日期和時(shí)間。日期格式化方法類(lèi)型還有一些專(zhuān)門(mén)用于將日期格式化為字符串的方法中國(guó)標(biāo)準(zhǔn)時(shí)間下午以上的這些方法都會(huì)根據(jù)系統(tǒng)環(huán)境而異。 咱們接著上面一篇繼續(xù)~ 1. Date類(lèi)型 JavaScript中的Date類(lèi)型使用自UTC時(shí)間,1970年1月1日零時(shí)開(kāi)始的毫秒數(shù)來(lái)保存日期。創(chuàng)建一個(gè)日期對(duì)象: var no...
摘要:繼承了如上,我們通過(guò)方法借調(diào)了超類(lèi)的構(gòu)造函數(shù),實(shí)際上是在新創(chuàng)建的實(shí)力環(huán)境下調(diào)用了構(gòu)造函數(shù)。組合繼承組合繼承的基本思想將原型鏈和借用構(gòu)造函數(shù)的技術(shù)組合到一塊,從而發(fā)揮二者之長(zhǎng)的一種繼承模式。繼承方法在上面這個(gè)例子中,構(gòu)造函數(shù)定義了兩個(gè)屬性和。 在ECMAScript中只支持實(shí)現(xiàn)繼承,而且實(shí)現(xiàn)繼承主要是依靠原型鏈來(lái)實(shí)現(xiàn)的。 1. 什么是原型鏈 繼承基本思想:利用原型讓一個(gè)引用類(lèi)型繼承另一個(gè)...
摘要:本文是重溫基礎(chǔ)系列文章的第六篇。以指定的精度返回該數(shù)值對(duì)象的字符串表示,可接收一個(gè)參數(shù),用來(lái)指定有效數(shù)個(gè)數(shù)的整數(shù)。 本文是 重溫基礎(chǔ) 系列文章的第六篇。今日感受:自己需要多總結(jié),會(huì)有不同收獲(比如今晚我做的轉(zhuǎn)正總結(jié))。 系列目錄: 【復(fù)習(xí)資料】ES6/ES7/ES8/ES9資料整理(個(gè)人整理) 【重溫基礎(chǔ)】1.語(yǔ)法和數(shù)據(jù)類(lèi)型 【重溫基礎(chǔ)】2.流程控制和錯(cuò)誤處理 【重溫基礎(chǔ)】3.循環(huán)和...
閱讀 2780·2023-04-25 20:19
閱讀 2031·2021-11-24 09:38
閱讀 1796·2021-11-16 11:44
閱讀 4976·2021-09-02 15:40
閱讀 1481·2019-08-30 15:55
閱讀 2100·2019-08-30 15:52
閱讀 3881·2019-08-29 17:20
閱讀 2449·2019-08-29 13:48