Appearance
Object
判断数据类型
typeOf判断是基本类型还是引用类型,返回字符串值有:'undefined'、'boolean'、'string'、'number'、'object'、'function',对null返回'object',如:
typeof 'abc' // 'string'
typeof {} // 'object'
instanceof对所有的基本类型都返回false,object instanceof constructor用于判断某个实例对象object的原型链上是否有构造函数constructor的prototype
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:在可迭代对象(包括Array、Set、Map、String、TypedArray、arguments对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句,不能直接用在普通对象上,用在数组时解决了forEach不能中途break或return跳出循环的缺陷Obejct.keys():返回对象自身可枚举属性的数组Obejct.getOwnPropertyNames():返回对象所有自身属性(包括不可枚举但不包括Symbol值作为名称)的数组