number | String | boolean | Symbol | null | undefined | object | |
---|---|---|---|---|---|---|---|
number | toString '' + |
Boolean() | |||||
String | Number('1') parseInt('1',10) parseFloat('1.23') '1' + 0 + '1' |
Boolean() | |||||
boolean | toString '' + |
||||||
Symbol | !! + | ||||||
null | 报错 '' + |
!! + | |||||
undefined | 报错 '' + |
!! + | |||||
object | "[object Object]" '' + String() |
!! + |
将其他的数据类型转换为String
// toString
1 + 1 // 2
(1).toString() + '1' // '11'
1 + '1' // '11'
window.String(1) // '1'
将其他的数据类型转换成Number
Number('1')
parseInt('1',10)
parseFloat('1.23')
'1' + 0
+ '1'
将其他的数据类型转换为Boolean
// Boolean()
Boolean(1) // true
Boolean(0) // false
Boolean('') // false
Boolean(' ') // true
Boolean('1') // true
Boolean(null) // false
Boolean(undefined) //false
Boolean({}) // true
Boolean({name: 'frank'}) // true
// !!
!true // false
!!true // true
!! 1 // true
!! 0 // false
!! '' // false
!! ' ' // true
!! {} // true
!! {name: 'frank'} // true
!! null // false
五个默认为false的falsy值:0,NaN,'',null,undefined
任意对象转换为Boolean均为true
// falsy值
number: 0 / NaN
String: ''
null: 都是false
undefined: 都是false
object: 都是true
Symbol null undefined
需要转为的情况不常见,略
object
内存:
JS 引擎将内存分为代码区和数据区, 我们只研究数据区。 数据区分为 Stack(栈内存)和 Heap(堆内存)。 简单类型的数据(如Number,string等)直接存在 Stack 里, 复杂类型的数据(object对象)是把 Heap 地址存在 Stack 里。
基本类型在栈内存中,对象是复杂类型在堆内存中。
对象的存储方式:
object 是对象的引用,对象的存储方式是在stack内存存储一个地址,形成对对象的引用,地址指向heap内存的某个位置。
垃圾回收:
如果一个对象没有被引用,它就是垃圾,将被回收。
深拷贝VS浅拷贝概念
深拷贝:
基本类型赋值就是深拷贝
// b变不影响a
var a = 1
var b = a
b = 2
a // 1
浅拷贝
// b变致a变
var a = {name: 'a'}
var b = a
b.name = 'b'
a.name // 也是 'b'
网友评论