javascript遍历对象

for in方法


var obj = {
  name:"mayun",
  age:55,
  surname:'男'
}
for(var prop in obj){
   console.log(obj[prop])
}
//这样会产生一个问题,会把会把obj原型对象上的属性也会遍历出来
var obj = {
  name:"mayun",
  age:55,
  surname:'男',
  __proto__:{
    lastname:"yun"
  }
}
//此时会把lastname属性也会遍历出来,
//此时可以用hasOwnPropetry方法判断属性是否是自己身上的属性
for(var prop in obj){
  if(obj.hasOwnProperty(prop)){
    console.log(obj[prop])
  }
//还有一个in方法,次方法会判断属性是否在对象上,原型上也算
"age" in obj //true
"lastname" in obj //true
}

instanceof方法

官方解释:instanceof运算符用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置
听着有点别扭,还是以一段代码说明:

//语法:A instanceof B
//其实就是判断A对象的原型链上有没有B的原型(B.prototype)
function B(){}
var A =new B();
A instansceof B;//true
A instanceof Object//true
//一切对象都继承Object.prototype,也有例外,比如Object.create(null)
Array instanceof Object//true
String instanceof Object//true
Array instanceof String//false

判断一个变量是数组还是对象,三种方法

var a = [] || {};
//第一种:
a instanceof Array//是数组返回true(有iframe会存在父子域问题)
//第二种:
a.constuctor === Array//是数组返回true
//第三种:(建议用这种)
Object.prototype.toString.call(a);//是数组会返回"[object Array]"的字符串
//第四种:.Array.isArray() 
ECMAScript5将Array.isArray()正式引入JavaScript,目的就是准确地检测一个值是否为数组。
IE9+、 Firefox 4+、Safari 5+、Opera 10.5+和Chrome都实现了这个方法。
但是在IE8之前的版本是不支持的。

你可能感兴趣的:(javascript遍历对象)