JS里的类型

类型转换

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

内存图

内存分为代码区和数据区
chrome为程序划分100M内存

数据区

栈 && 堆

数据区

简单示例
内存分配过程

引用

复杂类型存的是引用

示例

测试1

测试2
测试3

self 指向自己
测试4

很贱很贱的面试题

面试题

垃圾回收

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也变了 (浅拷贝)

复杂类型深拷贝的概念(这里没有实现)
面试题