变量

原始值

最简单的数据

  • 大小固定,保存在栈内存上

    引用值

    由多个值构成的对象

  • 存储在堆内存上

  • 包含引用值的变量实际上只包含指向响应对象的一个指针,而不是对象本身
  • 简单的复制对象只会复制指针,既浅拷贝

    typeof操作符、instanceof操作符

    typeof可以确定值的原始类型

    ```javascript let s = “Nicholas”; let b = true; let i = 22; let u; let n = null; let o = new Object();

console.log(typeof s); // string console.log(typeof i); // number console.log(typeof b); // boolean console.log(typeof u); // undefined console.log(typeof n); // object ,typeof null ==> object console.log(typeof o); // object

  1. <a name="fBG4a"></a>
  2. ### instanceof用于确保值的引用类型
  3. ```javascript
  4. console.log(personinstanceofObject); //变量person是Object吗?
  5. console.log(colors instanceof Array); // 变量 colors 是 Array 吗?
  6. console.log(pattern instanceof RegExp); // 变量 pattern 是 RegExp 吗?

执行上下文(作用域)

分为:全局上下文、函数上下文、块级上下文

垃圾回收机制

离开作用域的值会被自动标记为可回收,然后在垃圾回收期间被删除。

标记清理

先给当前不使用的值加上标记,再回来回收他们的内存

引用计数(循环引用时会出问题)

解除变量的引用不仅可以消除循环引用,而且对垃圾回收也有帮助。
为促进内存回收,全局对象、全局对象的属性和循环引用都应该在不需要时解除引用。