1 //js 數據類型共6種(es5) number,string,boolean,null,undefined,引用數據類型(Array,Object,Function) 2 //Symbol (ES6 新增,表示獨一無二的值) 3 var typeArr = [ 4 { 5 type: '數值類型', 6 value: 251 7 }, 8 { 9 type: '字符串類型', 10 value: 'abcdefg' 11 }, 12 { 13 type: '布爾類型', 14 value: false 15 }, 16 { 17 type: '布爾類型', 18 value: true 19 }, 20 { 21 type: 'null類型', 22 value: null 23 }, 24 { 25 type: 'undefined類型', 26 value: undefined 27 }, 28 { 29 type: '引用類型(對象{})', 30 value: {} 31 }, 32 { 33 type: '引用類型(對象{a:2})', 34 value: { a: 2 } 35 }, 36 { 37 type: '引用類型(數組[])', 38 value: [] 39 }, 40 { 41 type: '引用類型(數組[1])', 42 value: [1] 43 }, 44 { 45 type: '引用類型(數組[1,2])', 46 value: [1, 2] 47 }, 48 { 49 type: '引用類型(function)', 50 value: function () { } 51 } 52 ] 53 for (var i = 0; i < typeArr.length; i++) { 54 console.log(typeArr[i].type + typeArr[i].value + '轉化爲數值:', Number(typeArr[i].value)) 55 console.log(`${typeArr[i].type}${typeArr[i].value}轉化爲字符串:`, String(typeArr[i].value)) 56 console.log(`${typeArr[i].type}${typeArr[i].value}轉化爲布爾值:`, Boolean(typeArr[i].value)) 57 console.log(`${typeArr[i].type}${typeArr[i].value}執行toString:`, typeArr[i].value && typeArr[i].value.toString()) 58 console.log(`${typeArr[i].type}${typeArr[i].value}執行valueOf:`, typeArr[i].value && typeArr[i].value.valueOf()) 59 } 60 console.log() 61 // console.log([] + {}) // "[object Object]" 62 // console.log(Number([])) // "0" 63 // console.log(String([])) // "" 64 65 //基本數據類型之間轉化: 66 /* 67 string轉number 68 1.空字符串或全空字符串 0 69 2.純數字字符串或者科學計算法或者進制數表示 得對應的數值 70 3.其餘 NaN 71 */ 72 console.log(Number('')) // 0 73 console.log(Number(' ')) // 0 74 console.log(Number('9527')) // 9527 純數字字符串 75 console.log(Number('0x11')) // 17 16進製表示數 76 console.log(Number('2e2')) // 200 科學計數 77 console.log(Number('qerw')) // NaN 78 79 /* 80 string轉Boolean 81 只有空字符串轉爲 false 82 其餘全爲true 83 */ 84 console.log(Boolean('')) // false 85 console.log(Boolean(' ')) // true 86 87 /* 88 number轉string 89 1.普通數直接加引號變成字符串 90 2.表達式表示的數 將轉化爲實際數後加引號變成字符串 91 */ 92 console.log(String(0)) // '0' 93 console.log(String(0x11)) // '17' 94 console.log(String(2e2)) // '200' 95 console.log(String(2e-2)) // '0.02' 96 console.log(String(2 / 3)) // '0.6666666666666666' 97 98 /* 99 number轉boolean 100 0爲false,非0爲true 101 */ 102 console.log(Boolean(0)) // false 103 console.log(Boolean(1)) // true 104 105 /* 106 boolean轉number 107 false 0,true 1 108 */ 109 console.log(Number(true)) // 1 110 console.log(Number(false)) // 0 111 112 /* 113 undefined 轉number,string,boolean 114 */ 115 console.log(Number(undefined)) // NaN 116 console.log(String(undefined)) // 'undefined' 117 console.log(Boolean(undefined)) // false 118 119 /* 120 null 轉number,string,boolean 121 */ 122 console.log(Number(null)) // 0 123 console.log(String(null)) // 'null' 124 console.log(Boolean(null)) // false 125 126 /* 127 引用數據類型轉number 128 1.對象 NaN 129 2.數組 空數組爲0,只有一個元素且能夠轉化爲數字的會獲得對應的數值,其餘的都是NaN 130 3.函數 NaN 131 */ 132 console.log(Number({})) // NaN 133 console.log(Number([])) // 0 134 console.log(Number([1])) // 1 135 console.log(Number(['0x11'])) // 17 136 console.log(Number([1, 2])) // NaN 137 console.log(Number([1, 2, 3])) // NaN 138 console.log(Number(function () { })) // NaN 139 140 /* 141 引用數據類型轉string 142 1.對象 '[object Object]' 143 2.數組 去掉[]和分隔逗號,剩下的內容用引號包起來造成字符串 144 3.函數 整個函數體加引號成爲字符串 145 */ 146 console.log(String({})) // '[object Object]' 147 console.log(String([])) // '' 148 console.log(String([1])) // '1' 149 console.log(String([1, 2])) // '1,2' 150 console.log(String([1, 2, 3])) // '1,2,3' 151 console.log(String(function () { })) // 'function () { }' 152 153 154 /* 155 引用數據類型轉boolean 156 全爲true 157 */ 158 console.log(Boolean({})) // true 159 console.log(Boolean([])) // true 160 console.log(Boolean(function () { })) // true 161 162 163 164 //js顯式類型轉換 規律和原理總結 165 // 1.Number()轉數值類型的過程:先調用原生方法valueOf,若是返回值是能夠轉化成數值的基本數據類型,直接返回整個結果,結束。若是返回值是非基本數據類型,根據調用原生方法toString的返回字符串類型轉化成最終的數值類型,結束。 166 // 2.String()轉字符串類型的過程:先toString方法,返回值。 167 //因此知道原理後,涉及到引用類型這種的,記住這些toString的返回值就好了