前端进阶-01数据类型

1. 数据类型分类

  1. 基本(值)类型
    1. string : 任意字符串
    2. number : 任意数字
    3. boolean : true/false
    4. undefined : undefined
    5. null : null
  2. 对象(引用)类型
    1. Object : 任意对象
    2. Function : 一种特别的对象(可执行)
    3. Array : 一种特别的对象(数值下标,内部数据是有序的)

2. 判断

  • typeof
    • 返回数据类型的字符串表达
    • 不能判断:null、object 与 array
  • instanceof
    • 判断对象的具体类型
  • ===
    • 可以判断 undefined 和 null

使用案例

  1. typeof 返回数据类型的字符串表达

    1
    2
    3
    var a; // undefined
    console.log(typeof a === undefined); // false
    console.log(typeof a === "undefined"); // true
  2. typeof 不能判断null

    1
    2
    3
    var a = null;
    console.log(typeof a === "null"); // false
    console.log(typeof a); // object
  3. typeof 不能判断array

    1
    2
    3
    var a = [];
    console.log(typeof a === "array"); // false
    console.log(typeof a === "object"); // true
  4. typeof 返回的都是小写字符串

    1
    2
    3
    4
    5
    6
    7
    8
    9
    var a = {};
    var b = function(){};
    console.log(typeof a === "object"); // true
    console.log(typeof a === "Object"); // false
    console.log(a instanceof Object) // true

    console.log(typeof b === "function") // true
    console.log(typeof b === "Function") // false
    console.log(b instanceof Function) // true
  5. 判断是否为 undefined

    1
    2
    3
    var a; 
    console.log(typeof a === "undefined"); // true
    console.log(a===undefined); // true
  6. 判断是否为 null

    1
    2
    3
    4
    5
    6
    7
    8
    var a = null;
    console.log(a===null); // true

    // typeof a 返回 object
    console.log(typeof a==="null"); // false;
    console.log(typeof a==="object"); // true;
    // 但是 null 却不是 Object 对象的实例 , 真是奇怪了呀
    console.log(a instanceof Object); // false
  7. 如何判断是否为数组

    1
    2
    3
    4
    var a = [];
    console.log(a instanceof Array); // true
    console.log(Array.isArray(a)); // true
    console.log(Array.prototype === a.__proto__); // true

3. 相关问题

1. undefined 与 null 的区别

  • undefined 代表定义了未赋值;
  • null 代表定义并赋值了,但是赋值为 null;
    1
    2
    3
    4
    var a;
    console.log(a); // undefined
    a = null;
    console.log(a); // null

2. 什么时候给变量赋值 null

  • 初始赋值,表明将要赋值为对象
  • 结束前,让对象成为垃圾对象(被回收)
    1
    2
    3
    var a = null; // 初始赋值,表明将要赋值为对象
    a = ['java','js'];
    a = null; // 让 a 指向的对象成为垃圾对象(被垃圾回收器回收)

3. 严格区别变量类型与数据类型

  • 数据类型
    • 基本类型
    • 对象类型
  • 变量类型 (变量内存值得类型)
    • 基本类型 :保存的就是基本类型数据(栈中得数据)
    • 引用类型 :保存的是地址值
      1
      2
      3
      4
      5
      6
      7
      8
      var a = 1;
      var b = "javascript";
      var c = true;
      var d = {};
      var e = [];
      var f = function(){};

      // 等式右边为 数据类型,等式左边是变量类型