==> 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