js数据类型
就直接给自己写的代码吧:该写的都写在注释里了
- 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的返回值就行了
版权声明:本文为singerlee-changealive原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。