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]"的字符串
网友评论