chdyiboke / weekly

issue and share weekly
5 stars 1 forks source link

js数据类型的判断 #5

Open liukexina opened 4 years ago

liukexina commented 4 years ago
  1. typeof
  2. constructor
  3. instanceof
  4. isArray
  5. object.prototype.toString.call()
chdyiboke commented 4 years ago
  1. typeof 返回 number、boolean、symbol、string、object、undefined、function。 typeof null == 'object' // null ==> Null 引用类型,除了function返回function类型外,其他均返回object。

  2. constructor 是原型prototype的一个属性 new Number(1).constructor === Number null 和 undefined 无constructor,这种方法判断不了。

  3. instanceof A 是否为 B 的实例,表达式为:A instanceof B [] instanceof Array // true [] instanceof Object // true new Number(1) instanceof Number // true 不能判断一个对象实例具体属于哪种类型

  4. toString 推荐 Object.prototype.toString.call(value); // "[object xxx]" 可以区分 null、string、boolean、number、undefined、array、function、object、date、math等 Object.prototype.toString.call(1); // "[object Number]" // 日期类型 var date = new Date(); Object.prototype.toString.call(date); // "[object Date]"

  5. 其他 isArray Array.isArray(obj) Array.isArray([1, 2, 3]); // true Array.isArray({foo: 123}); // false

liukexina commented 4 years ago
  1. typeof console.log(typeof true); // boolean console.log(typeof 0); // number console.log(typeof ""); // string console.log(typeof undefined); // undefined console.log(typeof null); // object console.log(typeof []); // object console.log(typeof {}); // object console.log(typeof function () {}); // function console.log(typeof new Boolean(true)); // object

  2. instanceof instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。 console.log(true instanceof Boolean); // false console.log(new Boolean(true) instanceof Boolean); // true

  3. constructor Null、undefined. 不存在constructor

  4. isArray(ES5,ie8不支持)

  5. object.prototype.toString.call(a)
    Object.prototype.toString.call(); // "[object 类型]"