属性的表示方法和对象的枚举

对象
一、对象.属性

var obj = {
    name : 'mary',
    age : 18
};

console.log(obj.name, obj.age); // mary 18

二、对象[‘属性’] – 让对象属性更加灵活

var zhang = {
    wife1: {name: 'xiaomei'},
    wife2: {name: 'xiaoli'},
    wife3: {name: 'xiaowang'},
    wife4: {name: 'xiaoxiao'},
    sayWife: function (num) {
        return this['wife' + num];
    }
};

zhang.sayWife(3); // xiaowang

对象的枚举
一、for...in 语句

var obj = {
    name: 'mary',
    age: 18,
    sex: 'female',
    __proto__: {
        height: 180,
        weight: 75
    }
};

Object.prototype.name = 'smith'; // 在原型上自定义一个属性

for (var key in obj) {
    // console.log(key); // undefined * 5
    // 这里的 obj.key ==> obj['key'] --> 会去找它的 key 属性
    
    // 所以在枚举里面必须:
    console.log(obj[key]); // 这样才会遍历 obj 里面的每一个属性,包括原型上自定义的也要打印出来
}

二、遍历中可添加的 hasOwnPropertyininstanceof

  1. obj.hasOwnProperty()

一般和 for... in 一起使用(一个遍历,一个过滤)

但凡是系统自带的无论在哪都不会出来;但凡是自己定义的,无论在哪都会出来。

var obj = {
    name: 'mary',
    age: 18,
    sex: 'female',
    __proto__: {
        height: 180,
        weight: 75
    }
};

Object.prototype.abc = 'smith';

for (var key in obj) {
   	// 每一个对象都有一个 hasOwnProperty() 方法
    if (obj.hasOwnProperty(key)) {
        console.log(obj[key]); // 结果原型上自定义的属性的值没有打印出来,打印的是 obj 里面的属性值
    }
    
    if (!obj.hasOwnProperty(key)) { // 显示原型链上的自定义属性的值
        console.log(obj[key]); // smith
    }  
}
  1. in

只会检测对着对象里面有没有某个属性

Object.prototype.abc = 'abc';
let obj = {
    
};
console.log('abc' in obj); // true

不分青红皂白,原型链终端上面的都打印了,所以不怎么常用

  1. instanceof ⇒ 判断 A 原型链上有没有 B 的原型
function Person() {
    
}

var person = new Person();
console.log(person instanceof Person); // true
console.log(person instanceof Object); // true
console.log(person instanceof Array); // false
console.log({} instanceof Array); // false

三、区别对象和数组

  1. constructor ⇒ 看看有没有指向他的构造方法
var arr = [1, 2, 3];
var fun = function() {};
console.log(arr.constructor); // Array() { [native code] }
console.log(fun.constructor); // Function() { [native code] }
  1. instanceof ⇒ 看看是不是这个构造方法沟造出来的
function Person() {
    
}

var person = new Person();

console.log(person instanceof Person); // true
console.log(person instanceof Object); // true
console.log(person instanceof Array); // false
// 看看
console.log({} instanceof Array); // false
  1. Object.prototype.call()
console.log(Object.prototype.toString.call({})); // [object Object]
console.log(Object.prototype.toString.call([])); // [object Array]
  1. ES6 的 isArray()
Array.isArray([])  //true
Array.isArray({})  //false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iteval

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值