代码编织梦想

对象的枚举

1、for in 循环遍历
2、hasOwnProperty
3、in   
4、instanceof

对象的查询属性的两种方法

var obj = {
    name: 'wq',
    age: 12,
    sex: 'man',
    wife1:'',
    wife2:'',
    wife3:''
}

1、obj.name

其实第一种和第二章是一样的,只不过第一种在其内部做了隐式转换;
obj.name----->在内部做了obj['name']的操作,
所以也就是第一中的速度会比第二种方法更慢

2、obj['name']

对象加[],然后加属性名字的字符串形式obj['age'];
使用字符串的形式可以进行字符串拼接,更加灵活;obj['wife'+num],根据num的值;可以得到不同的值
如果是变量则不需要加引号:obj[param],param是变量可以是name,也可以是age

for in 用法

var obj = {
    name: 'wq',
    age: 12,
    sex: 'man'
}
1、
for (const objKey in obj) {
    console.log(objKey)
}  
//打印的是obj的属性名
2、
for (const objKey in obj) {
    console.log(obj.objKey)
} 
//打印的全部是undefined;为什么呢
//上面说了obj.objKey相当于内部隐式的使用了obj['objKey']去获取;
//obj里面没有objKey这个属性所有打印的全部是undefined;所以不能使用这种方式
3、
for (const objKey in obj) {
console.log(obj[objKey])
} 
//这样才能打印出属性的值,这里objKey相当于一个变量

hasOwnProperty用法

var obj = {
    name: 'wq',
    age: 12,
    sex: 'man',
    __proto__:{
        last:'a'
    }
}
Object.prototype.abc=123;
for (const objKey in obj) {
    console.log(obj[objKey])
}

你会发现打印出来的东西里面既然会有修改原型上的属性,本来这个原型上的属性你是不想打印的,结果有,那该怎么办

这里就可以使用hasOwnProperty方法,这方法可以判断该属性是你自己的还是原型上的;返回值是Boolean值
这里就可以使用hasOwnProperty方法,这方法可以判断该属性是你自己的还是原型上的;返回值是Boolean值
for (const objKey in obj) {
    if(obj.hasOwnProperty(objKey)){
        console.log(obj[objKey])
    }
}

不管你在自己原型链上加属性,即使是Object.prototype.abc=123上加,他也不打印,这就说明不是你自己的即使是继承的都不会打印

 

instanceof用法: A instanceof B

官方解释: A对象 是不是 B构造函数构造出来的
自己理解:看A对象的原型链上 有没有B的原型
function Person() {}
var obj={}
var person = new Person();
//person instanceof Person  person 是不是由Person构造出来的

 

如何区分是数组还是对象

var arr=[]||{}
1、constructor:
    数组的constructor是function Array(){};
    对象的constructor是function Object(){}
2、instanceof:
    数组 instanceof Array:为true;
    对象 instanceof Array: 为false
3、Object.prototype.toString.call([数组]) 返回的字符串可以判断是否是数组
//正常使用toString 方法是 obj.toString;toString方法里面的this,谁调用的就是谁
Object.prototype.toString=function (){
    //识别 this
    //返回相应的结果
}
obj.toString();
//obj.toString();这里obj调用的this指向的就是obj,所以想要改变this指向就可以使用call函数

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_41277748/article/details/113359608