712 字
4 分钟
JS中的类型转换
==> String
方法1 toString()方法
null和undefined没有toString()APIobject的toString()不能得到想要的结果console.log()默认调用toString()方法
123.toString() // '123' true.toString() // 'true' null.toString() // Cannot read property 'toString' of null undefined.toString() //Cannot read property 'toString' of undefined var a = {a:1} a.toString() // "[object Object]" ({a:1}).toString() // "[object Object]"方法2 + '' 加空字符串
1 + '1' // '11' ==> '+' 会自动进行类型转换,优先变为字符串 123 + '' // '123' true + '' // 'true' null + '' // 'null' undefined + '' // 'undefined' ({a:1}) + '' // "[object Object]" '' + {a:1} // "[object Object]"方法3 全局函数String()
String(1) // '1' String(true) // 'true' String(null) // 'null' String(undefined) // undefined String({a:1}) // "[object Object]"==> Boolean
方法1 全局方法Boolean()
Boolean(1) // true Boolean(0) // false Boolean(NaN) // false Boolean('') // false Boolean(' ') // true Boolean('123') // true Boolean(null) // false Boolean(undefined) //false Boolean({}) // true Boolean({a:1}) //true方法2 双重取反 ==> !!
!! 1 // true !! NaN // false !! 0 // false !! '' // false !! ' ' // true !! '123' // true !! null // false !! undefined //false !! {} // true !! {a:1} // true五个falsy值
0 NaN null undefined ”
==> Number
方法1 Number()
Number('1') // 1 Number('1.123') // 1.123 Number('1.abc') // NaN Number('') // 0 Number(true) // 1 Number(false) // 0 Number(null) // 0 Number(undefined) // NaN Number({a:1}) // NaN方法2 parseInt()
parseInt()主要是将字符串转为整数 它会从第一个字符开始,直到不是数字结束
parseInt('1') //1 parseInt('1.23') // 1 parseInt(' 123') // 123 parseInt('1234abc') // 1234 parseInt('abc') // NaN parseInt('a567bc') // NaN parseInt(true) // NaN parseInt(null) // NaN parseInt(undefined) // NaN parseInt({a:1}) // NaN parseInt([1,2,3]) // 1方法3 parseFloat()
parseFloat() 主要是将字符串转为浮点数
parseFloat('3.14') // 3.14 parseFloat('314e-2') // 3.14 parseFloat('0.0314E+2') // 3.14 // 其他与parseInt()结果相同方法4 - 0
'1' - 0 // 1 '1.23' - 0 // 1.23 '1.abc' -0 // NaN '' - 0 // 0 true -0 // 1 false - 0 // 0 null - 0 // 0 undefined - 0 // NaN ({a:1}) - 0方法5 取正
+ '1' // 1 + '1.23' // 1.23 + '1.abc' // NaN + '' // 0 + true // 1 + false // 0 + null // 0 + undefined // NaN + {a:1} // NaNJS中普通类型与对象的区别
普通类型 Number Bool String Symbol Null Undefined
数据直接存在栈内存中
var a = 1 var b = a a = 2 b // 1将a中的数据直接赋值给b,所以改变a,不会影响b ==> 深复制 所以普通类型之间的复制都是深复制
引用类型 Object
栈内存中保存的是对象在堆内存中的引用地址 通过这个引用地址可以快速查找到保存中堆内存中的对象
var a = {name:1} var b = a a.name = 2 b // {name:2}将a赋值给b的时候,实际上是b也指向了与a地址相同的对象, 改变a会影响b == > 浅复制
var a = {name:1} var b = a a = {name:2} b // {name:1}a = {name:2} 时,a指向了另一个对象的地址,而b还指向原来地址的对象,所以给a重新赋值不会影响b