类型转换 toString() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 var a = 1; var b = true; var c = {}; var d = null; var e = undefined; a.toString() // "1" b.toString() // "true" c.toString() // "[object Object]" d.toString() // 报错 e.toString() // 报错 //老司机怎么把不同类型变成字符串的 a + '' // "1" b + '' // "true" c + '' // "[object Object]" d + '' // "null" e + '' // "undefined" //智障写法 不同类型是不能 + 的 // + 如果发现左右任意一边有字符串 就会把另一边转为字符串 1 + '1' // 字符 "11" 相当于 (1).toString() + '1' 1 + 1 // 数字 2 //变成字符串常用的方法是 与空字符串相加 ‘’+ //除此之外 你可以 window.String(一个变量) 与 ‘’+ 一样
Boolean()方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Boolean(1) // true Boolean(2) // true Boolean(0) // false Boolean('') // false Boolean(' ') // true Boolean('21321') // true Boolean({a:11,b:22}) // true Boolean({}) // true //老司机 !! true //true !! 1 // true !! 0 // false !! '' // false !! ' ' //true !! {} //true !! null // false !! undefined //false
5个特殊值 Falsy
number
string
boolean
symbol
null
undefined
object
0 NaN
‘’
null
undefined
转为number类型
5种方式如图
考点
1 2 3 4 5 parseInt('011') // 11 parseInt('011',8) // 9 parseInt('011',10) // 11 parseInt('s') // NaN parseInt('1s') // 1
内存图
内存分为代码区和数据区
数据区
栈 && 堆
简单示例
引用
示例
self 指向自己
很贱很贱的面试题
垃圾回收
GC 如果一个变量没有被引用==>它就是垃圾 ==> 将被回收1 2 3 4 var a = {name : 'a'} // 分配内存地址 33 var b = {name : 'b'} // 分配内存地址 60 a = b // a 的内存地址 = b 的内存地址 ==> 60 // a原来的地址 33所占用的内存空间 就是 垃圾
深拷贝 && 浅拷贝 1 2 3 var a = 1; var b = a; b = 2 ;// b变 a 不变 就是深拷贝(基本类型的赋值都是深拷贝)
要考虑的是 复杂类型 的深拷贝 1 2 3 var a ={ name :'a'} var b = a ; b.name = 'b'; //这导致 a.name也变了 (浅拷贝)
复杂类型深拷贝的概念(这里没有实现)