javascript遍历循环对象和判断是否为对象的方法

       最近公司让我面试了一个前端时,我问了“遍历对象的方法”,结果她给了我一个曾经没有用过的方法,果然面试也是一种学习,故在此记录总结。

一. 遍历对象的方法

1.使用for ... in语句

      for..in语句是一种迭代语句,可以用来枚举对象的属性,也可以用来循环数组。但这里是有个坑的,会把原型上的方法名也遍历出来

Object.prototype.method=function(){
  console.log(this);
}
var myObject={
  a:1,
  b:2,
  c:3
}
for (var key in myObject) {
  console.log(key); // a b c method
}

2. 使用Object.keys遍历对象

      今天学到的是这种方法,先通过Object.keys找到对象中所有key值的一个数组,再forEach取得其value。

var obj = {
    name: 'Seeme',
    age: 27,
    job: 'Software Engineer'
};

Object.keys(obj).forEach(function(key){

     console.log(key,obj[key]);

});

3.使用for...of语句

for...of语句可遍历循环Array,Map,Set,String,TypedArray,arguments等等。

二. 判断对象的方法

      我们知道,判断基本数据类型时,typeof操作符可以准确的判断一个值是字符串、数值、布尔值、还是undefined,如果变量的值是一个对象或null,则typeof操作符都返回"object"。但在检测引用类型的值时,这个操作符的用处不大。这时可以有以下几种方法:

1.instanceof

const obj = {
  age: 27,
  name: 'Seeme'
};
const arr = [1, 2, 3];
const reg = /\[bc\]at/;
console.log(obj instanceof Object); // true
console.log(obj instanceof Array); // false
console.log(arr instanceof Object); // true
console.log(arr instanceof Array); // true
console.log(reg instanceof RegExp); // true
console.log(reg instanceof Object); // true

通过返回的instanceof返回的布尔值,我们可以判断出是否为Object、Array、RegExp、Boolean ,但由于Array和RegExp都属于引用类型,所以判断是否为Object时也为true。

2.constructor

var obj = { 
           name:'Nickolas'
        };
var arr = [1, 2, 3];
console.log(obj.constructor == Object);//true
console.log(arr.constructor == Array);//true

      但constructor会有一个问题,如果没有原型对象时,判断会出问题。如下面的例子

function Person() {};
Person.prototype = {
    name: 'Seeme',
    age: 27,
    job: 'Software Engineer'
}
function PersonName() {};
var person1 = new Person();
var personName1 = new PersonName();
console.log(person1.constructor == Object) // true
console.log(person1 instanceof Object) // true
console.log(personName1.constructor == Object) // false
console.log(personName1 instanceof Object) // true

3.prototype.toString方法

      这个方法是我觉得最准确的方法,可以分别把Object、Array、Function、RegExp检测出来

function fun() {}
var arr = [1, 2, 3]
var obj = {
  name: 'Seeme',
  age: 27
}
console.log(Object.prototype.toString.call(fun)); // "[object Function]"

console.log(Object.prototype.toString.call(arr)); // "[object Array]"
console.log(Object.prototype.toString.call(obj)); // "[object Object]"

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值