就直接给自己写的代码吧:该写的都写在注释里了
  1. 1 //js 数据类型共6种(es5) number,string,boolean,null,undefined,引用数据类型(Array,Object,Function)
  2. 2 //Symbol (ES6 新增,表示独一无二的值)
  3. 3 var typeArr = [
  4. 4 {
  5. 5 type: '数值类型',
  6. 6 value: 251
  7. 7 },
  8. 8 {
  9. 9 type: '字符串类型',
  10. 10 value: 'abcdefg'
  11. 11 },
  12. 12 {
  13. 13 type: '布尔类型',
  14. 14 value: false
  15. 15 },
  16. 16 {
  17. 17 type: '布尔类型',
  18. 18 value: true
  19. 19 },
  20. 20 {
  21. 21 type: 'null类型',
  22. 22 value: null
  23. 23 },
  24. 24 {
  25. 25 type: 'undefined类型',
  26. 26 value: undefined
  27. 27 },
  28. 28 {
  29. 29 type: '引用类型(对象{})',
  30. 30 value: {}
  31. 31 },
  32. 32 {
  33. 33 type: '引用类型(对象{a:2})',
  34. 34 value: { a: 2 }
  35. 35 },
  36. 36 {
  37. 37 type: '引用类型(数组[])',
  38. 38 value: []
  39. 39 },
  40. 40 {
  41. 41 type: '引用类型(数组[1])',
  42. 42 value: [1]
  43. 43 },
  44. 44 {
  45. 45 type: '引用类型(数组[1,2])',
  46. 46 value: [1, 2]
  47. 47 },
  48. 48 {
  49. 49 type: '引用类型(function)',
  50. 50 value: function () { }
  51. 51 }
  52. 52 ]
  53. 53 for (var i = 0; i < typeArr.length; i++) {
  54. 54 console.log(typeArr[i].type + typeArr[i].value + '转化为数值:', Number(typeArr[i].value))
  55. 55 console.log(`${typeArr[i].type}${typeArr[i].value}转化为字符串:`, String(typeArr[i].value))
  56. 56 console.log(`${typeArr[i].type}${typeArr[i].value}转化为布尔值:`, Boolean(typeArr[i].value))
  57. 57 console.log(`${typeArr[i].type}${typeArr[i].value}执行toString:`, typeArr[i].value && typeArr[i].value.toString())
  58. 58 console.log(`${typeArr[i].type}${typeArr[i].value}执行valueOf:`, typeArr[i].value && typeArr[i].value.valueOf())
  59. 59 }
  60. 60 console.log()
  61. 61 // console.log([] + {}) // "[object Object]"
  62. 62 // console.log(Number([])) // "0"
  63. 63 // console.log(String([])) // ""
  64. 64
  65. 65 //基本数据类型之间转化:
  66. 66 /*
  67. 67 string转number
  68. 68 1.空字符串或全空字符串 0
  69. 69 2.纯数字字符串或者科学计算法或者进制数表示 得对应的数值
  70. 70 3.其他 NaN
  71. 71 */
  72. 72 console.log(Number('')) // 0
  73. 73 console.log(Number(' ')) // 0
  74. 74 console.log(Number('9527')) // 9527 纯数字字符串
  75. 75 console.log(Number('0x11')) // 17 16进制表示数
  76. 76 console.log(Number('2e2')) // 200 科学计数
  77. 77 console.log(Number('qerw')) // NaN
  78. 78
  79. 79 /*
  80. 80 string转Boolean
  81. 81 只有空字符串转为 false
  82. 82 其他全为true
  83. 83 */
  84. 84 console.log(Boolean('')) // false
  85. 85 console.log(Boolean(' ')) // true
  86. 86
  87. 87 /*
  88. 88 number转string
  89. 89 1.普通数直接加引号变成字符串
  90. 90 2.表达式表示的数 将转化为实际数后加引号变成字符串
  91. 91 */
  92. 92 console.log(String(0)) // '0'
  93. 93 console.log(String(0x11)) // '17'
  94. 94 console.log(String(2e2)) // '200'
  95. 95 console.log(String(2e-2)) // '0.02'
  96. 96 console.log(String(2 / 3)) // '0.6666666666666666'
  97. 97
  98. 98 /*
  99. 99 number转boolean
  100. 100 0为false,非0为true
  101. 101 */
  102. 102 console.log(Boolean(0)) // false
  103. 103 console.log(Boolean(1)) // true
  104. 104
  105. 105 /*
  106. 106 boolean转number
  107. 107 false 0,true 1
  108. 108 */
  109. 109 console.log(Number(true)) // 1
  110. 110 console.log(Number(false)) // 0
  111. 111
  112. 112 /*
  113. 113 undefined 转number,string,boolean
  114. 114 */
  115. 115 console.log(Number(undefined)) // NaN
  116. 116 console.log(String(undefined)) // 'undefined'
  117. 117 console.log(Boolean(undefined)) // false
  118. 118
  119. 119 /*
  120. 120 null 转number,string,boolean
  121. 121 */
  122. 122 console.log(Number(null)) // 0
  123. 123 console.log(String(null)) // 'null'
  124. 124 console.log(Boolean(null)) // false
  125. 125
  126. 126 /*
  127. 127 引用数据类型转number
  128. 128 1.对象 NaN
  129. 129 2.数组 空数组为0,只有一个元素且可以转化为数字的会得到对应的数值,其他的都是NaN
  130. 130 3.函数 NaN
  131. 131 */
  132. 132 console.log(Number({})) // NaN
  133. 133 console.log(Number([])) // 0
  134. 134 console.log(Number([1])) // 1
  135. 135 console.log(Number(['0x11'])) // 17
  136. 136 console.log(Number([1, 2])) // NaN
  137. 137 console.log(Number([1, 2, 3])) // NaN
  138. 138 console.log(Number(function () { })) // NaN
  139. 139
  140. 140 /*
  141. 141 引用数据类型转string
  142. 142 1.对象 '[object Object]'
  143. 143 2.数组 去掉[]和分隔逗号,剩下的内容用引号包起来形成字符串
  144. 144 3.函数 整个函数体加引号成为字符串
  145. 145 */
  146. 146 console.log(String({})) // '[object Object]'
  147. 147 console.log(String([])) // ''
  148. 148 console.log(String([1])) // '1'
  149. 149 console.log(String([1, 2])) // '1,2'
  150. 150 console.log(String([1, 2, 3])) // '1,2,3'
  151. 151 console.log(String(function () { })) // 'function () { }'
  152. 152
  153. 153
  154. 154 /*
  155. 155 引用数据类型转boolean
  156. 156 全为true
  157. 157 */
  158. 158 console.log(Boolean({})) // true
  159. 159 console.log(Boolean([])) // true
  160. 160 console.log(Boolean(function () { })) // true
  161. 161
  162. 162
  163. 163
  164. 164 //js显式类型转换 规律和原理总结
  165. 165 // 1.Number()转数值类型的过程:先调用原生方法valueOf,如果返回值是可以转化成数值的基本数据类型,直接返回整个结果,结束。如果返回值是非基本数据类型,根据调用原生方法toString的返回字符串类型转化成最终的数值类型,结束。
  166. 166 // 2.String()转字符串类型的过程:先toString方法,返回值。
  167. 167 //所以知道原理后,涉及到引用类型这种的,记住这些toString的返回值就行了

版权声明:本文为singerlee-changealive原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/singerlee-changealive/p/11132944.html