Skip to content
On this page

Object

判断数据类型

  • typeOf判断是基本类型还是引用类型,返回字符串值有:'undefined'、'boolean'、'string'、'number'、'object'、'function',对null返回'object',如:
typeof 'abc' // 'string'
typeof {} // 'object'
  • instanceof对所有的基本类型都返回false,object instanceof constructor用于判断某个实例对象object的原型链上是否有构造函数constructorprototype
let a = {};
a instanceof Object // true
let b = function(){};
b instanceof Function // true
let c = '666';
c instanceof String // false
  • Object.prototype.toString.call(),可判断的类型值有Boolean、String、Number、Null、Undefined、Symbol、Object、Array、Function、RegExp、Math、Global、JSON、Error、Map、Set
function isType(data, type) {
    const typeObj = {
        '[object String]': 'string',
        '[object Number]': 'number',
        '[object Boolean]': 'boolean',
        '[object Null]': 'null',
        '[object Undefined]': 'undefined',
        '[object Object]': 'object',
        '[object Array]': 'array',
        '[object Function]': 'function',
        '[object Date]': 'date',
        '[object RegExp]': 'regExp',
        '[object Map]': 'map',
        '[object Set]': 'set',
        '[object HTMLDivElement]': 'dom',
        '[object WeakMap]': 'weakMap',
        '[object Window]': 'window',
        '[object Error]': 'error',
        '[object Arguments]': 'arguments',
    }
    let name = Object.prototype.toString.call(data) // 借用Object.prototype.toString()获取数据类型
    let typeName = typeObj[name] || '未知类型' // 匹配数据类型
    return typeName === type // 判断该数据类型是否为传入的类型
}

遍历

  • for...in: 以任意顺序遍历一个对象的除Symbol外的可枚举属性(包括原型链上,如只需自身属性可再加Object.hasOwnProperty判断),一般不用于迭代数组,索引顺序很重要

  • for...of:在可迭代对象(包括ArraySetMapStringTypedArrayarguments对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句,不能直接用在普通对象上,用在数组时解决了forEach不能中途breakreturn跳出循环的缺陷

  • Obejct.keys():返回对象自身可枚举属性的数组

  • Obejct.getOwnPropertyNames():返回对象所有自身属性(包括不可枚举但不包括Symbol值作为名称)的数组