javascript的強制類型轉換

一、toStringjavascript

(1)調用toString方法java

Array是將數組中的每一個元素字符串化,並使用逗號拼接起來數組

object返回的是內部屬性[[Class]]的值,[object Object]安全

number則是轉換爲字符串值,如1轉爲"1",NaN轉爲"NaN",1/0轉爲"Infinity"函數

boolean,true轉爲"true",false轉爲"false"工具

(2)JSON字符串化對象

工具函數JSON.stringify(..)在將JSON對象序列化爲字符串時也使用了ToString方法ip

JSON.stringify(11)  // 11字符串

JSON.stringify("11")  // ""11""string

JSON.stringify(null)  // "null"

JSON.stringify(true)  // "true"

可是JSON.stringify只能轉化安全的JSON值,不安全的值包含以下格式

  • undefined
  • function
  • symbol
  • 包含循環引用的對象

當在object中出現undefined、function、symbol時會自動忽略,在array中遇到則返回null,已保證單元格位置不變。

當包含循環引用的對象時,則會報錯。

注意:若對象定義了toJSON()方法,JSON字符串化時會先調用該方法,而後使用它的返回值來進行序列化。(所以能夠對JSON不安全的對象,定義一個toJSON方法)

JSON.stringify(..)第二個參數能夠是數組或函數,數組定義須要哪些key值須要被返回,函數有兩個參數,分別爲key和value,若是要忽略某個值,則return undefined,不然return相應的value。

var a = {

  b: 11,

  c: '11',

  d: [1, 2, 3]

}

JSON.stringify(a, ['b', 'c']) // {b: 11, c: '11'}

JSON.stringify(a, function(k, v) {

  if (k !== 'c') return v;

})

// {b: 11, c: '11'}

a、字符串、數字、布爾值和null的JSON.stringify(..)規則和toString()方法相同

b、若是傳遞給JSON.stringify(..)的對象定義了toJSON()方法,那麼該方法會在字符串化前調用,以便將對象轉化爲安全的JSON值。

二、toNumber

ES5規範定義了抽象操做ToNumber

true 轉換爲1,

false 轉換爲0,

undefined轉換爲NaN,

null轉換爲0,

字符串如果類數字轉換爲對應的數字,處理失敗返回NaN,

對於以0開頭的16進制不是按16進制處理,而是按10進制處理,

對象會首先轉換爲基本類型值,而後再按以上規則進行轉換。

轉換爲基本類型值的方式是檢查該對象是否有valueOf()方法,若是有而且返回基本類型值,就使用該值進行強制類型轉換。若是沒有就使用toString()的返回值(若是存在)來進行強制類型轉換。

若是valueOf()和toString()均不返回基本類型值,則產生TypeError錯誤。

從ES5開始,使用Object.create(null)建立的對象[[Prototype]]屬性爲null,而且沒有valueOf()和toString()方法,所以沒法進行強制類型轉換。

三、toBoolean

javascript中的值分爲如下兩類:

(1)能夠被強制類型轉換爲false的值

(2)其餘(能夠被強制類型轉換爲true的值)

ES5規範9.2節中定義了抽象操做toBoolean

如下這些是假值:

  • undefined
  • null
  • false
  • +0、-0、NaN
  • ""

假值能夠強制類型轉換爲false。從邏輯上講,假值之外的都應該是真值。但Javascript規範對此並無明確的定義,只是給出了一些實例。

相關文章
相關標籤/搜索