for in
var obj = {
name: '13',
age: 123,
sex: 'male',
height: 180,
weight: 75
}
for(var key in obj){
console.log(key + " " +typeof(key));
console.log(obj[key]);
}
但是该方法会把原型链上的属性也遍历,这也许不是我们想要的,我们可以用以下方法2来解决
1.hasOwnProperty
var obj = {
name: '13',
age: 123,
sex: 'male',
height: 180,
weight: 75
}
for(var key in obj){
if(obj.hasOwnProperty(prop)){ //过滤
console.log(obj[key]);
}
}
2.in
in会遍历对象上所有能访问的属性,包括原型
3.instanceof
A instanceof B 表示判断 A 对象是不是 B构造函数构造出来的,这是官方解释,但是我们在使用过程中,往往是判断 A对象的原型链上有没有B的原型
怎么判断是数组还是对象
1.使用 constructor 进行区分
[].constructor //function Array() {[native code]}
var obj = {};
obj.constructor //function Object() {[native code]}
2.使用 instanceof 进行区分
[] instanceof Array //true
var obj = {};
obj instanceof Array //false
3.通过 toString 方法来区分
Object.prototype.toString.call([]);//"[object Array]"
Object.prototype.toString.call(123);//"[object Number]"
Object.prototype.toString.call({});//"[object Object]"