JavaScript數據類型轉換總結

個人github博客 github.com/zhuanyongxi…git

數據類型的轉換

在JS中,引用數據類型轉換爲原始數據類型轉換隻有三種狀況:github

  • 轉換爲布爾值;
  • 轉換爲數字;
  • 轉換爲字符串。

換一種方式來表達,在JS中,全部的數據均可以去轉(注意這裏的用詞,是「轉」,不是「轉成」)布爾值、數字和字符串(並不必定能成功)。數組

轉成布爾值函數

很是簡單,除了undefined、null、「」、NaN、0、-0、false以外,全都是true。ui

轉成字符串spa

也很是的簡單,須要注意的有四個:數組、對象、函數、symbol。code

其實重要的就是數組和對象。對象

function fn() {
  console.log("Hello World");
}
console.log(String([1, 2]));	// "1,2"
console.log(String({}));	// "[object Object]"
console.log(String(fn));	
// "function a() {window.runnerWindow.proxyConsole.log(\"Hello World\");}"
console.log(String(Symbol('foo')));	// "Symbol(foo)"
複製代碼

轉成數字blog

在JS中,轉數字比較複雜。經常使用的轉換數字的方法有:Number、parseInt和parseFloat。其中Number在轉字符串的時候若是遇到有非數字的東西,會返回NaN,因此也被稱爲強制轉換。另外兩個是從左到右一位一位的轉換,因此也被成爲非強制轉換。內存

Number方法

與一元操做符+的效果相同。即Number("1")+"1"相同。

  • Boolean,true和false分別是1和0;
  • 數字返回數字;
  • null返回0;
  • undefined返回NaN;
  • Symbol會拋錯;
  • 若是是字符串:
    1. 空字符串轉爲0;
    2. 只包含數字的狀況,Number會消除前導的0,好比「001」,轉換以後就是1。浮點格式與整數相同。
    3. 若是字符串包含除數字之外的其餘字符(字符串開頭能夠有正負號),都會轉爲NaN。
  • 若是是對象,先轉成字符串,再把字符串轉成數字。

若是是四則運算,字符串的優先級最高,數字第二。意思就是若是相加的遇到了字符串,則不是字符串的轉化爲字符串,若是沒有字符串,有一個數字,則不是數字的轉化爲數字。

數據類型的比較(隱式轉換)

  1. NaN與任何值都不相等,包括它本身。
  2. 對象與對象比較,比較的是否是指向同一個內存地址
  3. 對象與字符串比較,對象先轉化爲字符串,而後作比較
  4. 對象與布爾類型值比較,兩邊都要先轉爲數字(false是0,true是1)。對象類型的值先隱式調用toString方法,在隱式調用Number方法
  5. 對象與數字比較,對象轉化爲數字再比較(先隱式調用toString方法,再隱式調用Number方法將對象轉化爲數字)
  6. 數字與布爾類型值比較,就是進行數字的比較
  7. 數字與字符串的比較,把字符串轉化爲數字,再比較
  8. 布爾與布爾,兩邊都轉化爲數字再比較
  9. null與undefined比較,true
  10. null、undefined與其餘類型比較,結果都是false,由於他們倆沒有toString方法

簡化版

  1. 只要有數字和布爾值的,都轉換成數字進行比較;
  2. 對象與對象比較,比較的是否是指向同一個內存地址;
  3. 對象與字符串比較,對象先轉化爲字符串,而後作比較;
  4. null、undefined、NaN與其餘類型比較,null和undefined除了本身以外,相互比較也是相等的,此外與其餘類型比較,結果都是false,由於他們倆沒有toString方法。其中NaN與任何比較都是false(包括本身)。
// 1,
1 == "1"; // true
1 == true;  // true

// 2,
var obj1 = {}
var obj2 = {}
var obj3 = obj1
obj1 == obj2 // false
obj1 == obj3 // true

// 3,
{} == "{}" // false,對象{}轉化爲字符串是"[object Object]"

// 4,
null == null // true
undefined == undefined // true
null == undefined // true
"" == null // false
NaN == NaN // false

複製代碼
相關文章
相關標籤/搜索