for in基本使用:
// 遍历对象
var obj = {
a : 1,
b : 2,
c : 3
}
for(var prop in obj){
console.log(typeof prop);//string
console.log(obj[prop]);
//prop本身是string类型,再加''会变成属性名,即成了找obj.prop:undefined
}
hasOwnProperty()
var obj = {
a : 1,
b : 2,
__proto__:{
lastName : 'li'
}
}
for(var prop in obj){
//每个对象都有hasOwnProperty([属性名字符串]),
//若是对象自身属性返回true,否则false
if(obj.hasOwnProperty(prop)){
console.log(obj[prop]);
}
}
var obj = {
a : 1,
b : 2,
__proto__:{
lastName : 'li'
}
}
Object.prototype.abc = '123';
for(var prop in obj){
//但凡是自设的属性,无论在哪都一定会找到
//但凡是系统的属性,无论在哪都一定不会找到
if(!obj.hasOwnProperty(prop)){//用的是!
console.log(obj[prop]);
}
}
//li
//123
in
// in和hasOwnproperty()相同点:都是用来查看字符串属性名是否属于对象
//in和hasOwnproperty()不同点:无论自设属性还是系统属性,都属于对象
//总结:in是用来查看该属性能否被对象调用?
//hasOwnproperty用来查看属性是否属于对象?
var obj = {
a : 1,
b : 2,
__proto__:{
lastName : 'li'
}
}
instanceof
//instanceof用法与操作与In类似
// 对象A 是不是 B构造函数 构造出来的?
// 实际上是,看A对象的原型链上 有没有 B的原型
// A instanceof B
function Person(){}
var person = new Person();
一个变量有可能是数组,也有可能是对象,如何区分?var a = []?{}
方法一:
方法二:
方法三:
前提:每个函数都重写了toString方法
问题:如何让数组调用toString()?call()改变this指向
首先:
Object.prototype.toString = function(){
第一步:识别this
第二步:返回相应的结果
}
其次:
Object.prototype.toString.call()
call()改变this指向,谁调用this返回谁