JavaScript中字符串類型


字符串類型

字符串介紹

這是程序里面使用最為廣泛的一-種類型。在JavaScript里面, 可以使用單引號,也可以使用雙引號;

字符串這種數據類型非常霸道,它和其他數據類型相加都會被轉換后才為字符串類型;
所以如果我們要讓一個非字符串的變量轉換為字符串的話,只需要和一個空字符串相加就可以了。
當然,轉換字符串事實上我們也有相應的函數來轉換,最常見的就是toString()函數。

nullundefined並不能通過toString0函數來轉換為相應的字符串 。還有一個知識點,就是toString(函數在轉換數值的時候是 可以帶有參數的。可以將數值指定轉換為幾進制

JavaScript還有一個函數是string(),這個函數可以將五種類型都轉換為字符串

字符串模板

es6中新增了模板字面量是增強版的字符串,它用反引號(`)標識

使用模板字面量語法創建一個字符串,並賦值給message變量,這是變量的值與一個普通字符串無異;

如果想在字符串中包含反引號,只需要使用反斜杠\轉義即可;

在反引號之內的所有空白符都是字符串的一部分,因此需要特別留意縮進

模板字面量看上去僅僅是普通JS字符串的升級版,但二者之間真正的區別在於模板字面量的變量占位符。變量占位符允許將任何有效的JS表達式嵌入到模板字面量中,並將其結果輸出為字符串的一部分

變量占位符由起始的${與結束的}來界定,之間允許放入任意的JS表達式。最簡單的變量占位符允許將本地變量直接嵌入到結果字符串中
   占位符${name}會訪問本地變量name,並將其值插入到message字符串中。message變量會立即保留該占位符的結果
既然占位符是JS表達式,那么可替換的就不僅僅是簡單的變量名。可以輕易嵌入運算符、函數調用等

symbol類型

ES5中包含5種原始類型:字符串、數字、布爾值、nullundefinedES6引入了第6種原始類型:symbol

 

ES5的對象屬性名都是字符串,很容易造成屬性名沖突。比如,使用了一個他人提供的對象,想為這個對象添加新的方法,新方法的名字就有可能與現有方法產生沖突。如果有一種機制,保證每個屬性的名字都是獨一無二的,這樣就從根本_上防止了屬性名沖突。這就是ES6引入symbol的原因。

簡單值和復雜值的區別
簡單值

簡單值是表示JS中可用的數據或信息的最底層形式或最簡單形式。簡單類型的值被稱為簡單值,是因為它們是不可細化的。

也就是說,數字是數字,字符是字符,布爾值是truefalse, nullundefined就是null

undefined。這些值本身很簡單,不能夠再進行拆分。由於簡單值的數據大小是固定的,所以簡單值的數據是存儲於內存中的棧區里面的。

nllundefined比較特殊,打印出來的數據類型分別是objectundefined。因為這兩個數據類型沒有對應的構造函數

復雜值

JavaScript,對象就是一個復 雜值。因為對象可以向下拆分,拆分成多個簡單值或者復雜值。復雜值在內存中的大小是未知的,因為復雜值可以包含任何值,而不是一個特定的已知值。所以復雜值的數據都是存儲於堆區里面。

訪問方式

按值訪問:簡單值是作為不可細化的值進行存儲和使用,引用他們會轉移其值

引用訪問:復雜值是通過引用進行存儲和操作的,而不是實際的值。創建一個包含復雜對象的變量時,其值是內存中的一個引用地址。引用一個復雜對象時,使用它的名稱(即變量或對象屬性)通過內存中的引用地址獲取該對象值

比較方式:簡單值采用值比較,而復雜值采用引用比較。復雜值只有在引用相同的對象(即有相同的地址)時才相等。即使是包含相同對象的兩個變量也彼此不相等,因為它們並不指向同一個對象

動態屬性

對於復雜值,可以為其添加屬性和方法,也可以改變和刪除其屬性和方法;但簡單值不可以添加屬性和方法

復雜值支持動態對象屬性,因為我們可以定義對象,然后創建引用,再更新對象,並且所有指向該對象的變量都會獲得更新。

一個新變量指向現有的復雜對象,並沒有復制該對象。這就是復雜值有時被稱為引用值的原因。復雜值可以根據需求有任意多個引用,即使對象改變,它們也總是指向同一個對象

變量賦值

最后說一下關於變量的賦值,其實是可以分為直接賦值和引用賦值的。直接賦值,就是指將簡單值賦值給變量,而引用賦值是指將一個復雜值的引用賦值給變量,這個引用指向堆區實際存在的數據

類型轉換

隱性轉換
當不同數據類型進行相互運算的時候,當對非布爾類型的數據求布爾值的時候
預期為數字的時候:
算術運算的時候,我們的結果和運算的數都是數字,數據會轉換為數字進行計算(-* / %)

預期為字符串的時候:

轉為字符串使用+號時候,會自動轉換為字符串

預期為布爾的時候:

轉換為布爾值,undefined, null,  11”0, NaN轉為false, 其余轉為true

強制轉換

轉換為數值number()parseInt() parseFloat() 轉換函數小技巧:

轉換字符串: a="+數據轉換布爾: !數據類型

轉換數值:數據類型*/1

運算符

任何編程語言基本上都離不開運算符。在JavaScript中也是支持眾多運算符的。例如最常見的算數運算符,比較運算符,邏輯運算符等。接下來,就讓我們一起來看一下JavaScript中這幾種常見的運算符。

 

算數運算符,

 

常見的算數運算符有加減乘除和取模運算。主要需要注意的就是,在動態語言中做除法運算時,能夠得到小數。

es6開始新增加了求冪運算,使用兩個*號代表求冪。

一元運算符

所謂一元運算符,就是指只作用於一一個操作數的運算符。常見的一元運算符有兩種,賦值運算符和遞增遞減運算符。

常見的一元運算符還有遞增和遞減。在遞增遞減中,主要需要注意前置和后置的區別。如果是前置,那么是先自增或自減,然后參與運算。如果是后置,則是先參與運算,然后再自增或者自減,

需要注意的是,我們的自增自減操作符不僅僅局限於數值,其他類型也可以,遵循下面的規則: :

在應用於一個包含有效數字字符的字符串時,現將其轉換為數字值,再執行加減1操作。字符串變量變為了數值變量。

在應用於一個不包含有效數字字符的字符串時,將變量的值設置為NaN,字符串變量變成數值變量。

遇布爾值false時, 先將其轉換為0再執行加減1操作,布爾值變量變成數值變量。

遇布爾值true時,先將其轉換為1再執行加減1操作,布爾值變量變成數值變量。

在應用浮點數數值時,執行加減1操作。

比較運算符

如果兩個數都是數值,則執行數值比較

如果兩個數都是字符串,則比較兩個字符串對應的字符編碼

如果一個操作數是數值,則將另一個操作數轉換為一個數值,然后執行數值的比較

如果一個操作數是對象,則調用這個對象的valueOf()方法,用得到的結果按照前面的規則執行比較。如果對象沒有value0f()方法,則調用toString()方法,並用得到的結果根據前面的規則執行比較。

如果一個數是布爾值,則先將其轉換為數值,然后再進行比較

 

相等和不相等
==表示相等,!= 表示不相等,數據類型不同的數據進行相等比較的話會自動轉換數據類型,還有一些其他的轉換規則如下:
●nullundefined是相等的
如果有一個操作數是NaN,則返回false, NaNNaN比較也是false

如果是數字的字符串和數字進行比較,會先將字符串轉換為數字

布爾值里面true轉換為1false轉換 0

全等是===,不全等是!==這個就是必須數據類型和數值都相等

邏輯運算符

所謂非,就是取反,非真即假,非假即真

非運算符不僅僅只能用於布爾值,其他數據類型也是可以的,如下:

如果操作數是一個對象,返回false

如果操作數是一個空字符串,返回true●如果操作數是一個非空字符串,返回false如果操作數是數值0,返回true

如果操作數是任意非0數值(包括Infinity), 返回false●如果操作數是null,返回true●如果操作數是NaN,返回true

如果操作數是undefined,返回true

作用於兩到多個值,並且只有所有的操作數都是真值時,才為true
JavaScript里面的與存在短路現象,具體說明如下:
●第一個操作數為真:會進入第二個操作數的判斷,且無論第二個操作數真假,都會返回第二個操作數。
●第一個操作數為假:不會進入第二個操作數的判斷,直接返回第一 個操作數。

如果你看《JavaScript高級程序設計》這本書,里面還講了諸如下面這些雜七雜八的規則:

●如果第一個操作數是對象,則返回第二個操作數

●如果第二個操作數是對象,則只有在第一-個操作數的求值結果為true的情況下才會返回該對象

●如果兩個操作數都是對象,則返回第二個操作數

●如果有一個操作數是null,則返回null

●如果有一個操作數是NaN,則返回NaN

●如果有一個操作數是undefined, 則返回undefined

同樣是作用於兩到多個值,但是只有一個操作數為真,就返回真
JavaScript里面的或同樣存在短路現象,具體說明如下:
●如果第一個操作數為真,則不會進入第二個數的判斷。所以無論第二個操作數真假,都直接返回第-個操作數
●如果第一個操作數為假,則會進入第二個數的判斷。但是無論第二個操作數真假,都直接返回第二個操作數

如果你看《JavaScript高級程序設計》這本書,里面也講了諸如下面這些雜七雜八的規則:

●如果第一個操作數是對象,則返回第一 個操作數

●如果第一個操作數的求值結果為false, 則返回第二個操作數

●如果兩個操作數都是對象,則返回第一個操作數

●如果兩個數都是null,則返回null

●如果兩個數都是NaN,則返回NaN

●如果兩個數都是undefined,則返回undefined

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM