Appearance
一、数据类型
js
var a =null
console.log(typeof a)//object用typeof判断null类型输出为object.=== 只能判断 undefined和nulltypeof可以判断 undefined,number,string,boolean,function 不能判断 null和object。 undefined和null的区别: undefined代表未定义 null赋值了,值没赋到。
二、数据,变量,内存
- 栈:全局变量,局部变量
- 堆:对象
var a = {name: 'tom'}a存在栈里面,关联存储的地址比如:0x100。内容在堆,通过一个物理地址0x100进行关联a和值。var a = 1var b = a;改变b的值,a的值不改变,在栈内存先存储一个a=1,之后又在栈内存存储了一个b=1;var a={name: 'tom'}var b=a;通过b.name='tony',改变值,打印a,a的值也发生也改变。因为a b,在栈内存存储了一个物理地址,指向了同一个堆内存.
三、js引擎管理内存
内存生命周期:分配内存,使用内存,释放内存。
- 局部变量:函数执行完,释放内存。
- 对象:成为垃圾对象=》垃圾回收机制=》标记清除
- 全局变量:常驻内存,直到关闭网页。
- var a = 3 占用一个内存空间
- var obj={} 占用两个内存空间, obj占用一个, {}内容占用一个。
- 函数内的变量,运行时声明,函数运行结束释放内存。
- 函数内声明对象, var b ={} b自动释放,b所指向的对象{} 在某个时刻由垃圾回收器回收