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