对象
一、对象.属性
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 里面的每一个属性,包括原型上自定义的也要打印出来
}
二、遍历中可添加的 hasOwnProperty
、in
、instanceof
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}
}
in
只会检测对着对象里面有没有某个属性
Object.prototype.abc = 'abc';
let obj = {};
console.log('abc' in obj); // true
不分青红皂白,原型链终端上面的都打印了,所以不怎么常用
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
三、区别对象和数组
constructor
⇒ 看看有没有指向他的构造方法
var arr = [1, 2, 3];
var fun = function() {};
console.log(arr.constructor); // Array() { [native code] }
console.log(fun.constructor); // Function() { [native code] }
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
Object.prototype.call()
console.log(Object.prototype.toString.call({})); // [object Object]
console.log(Object.prototype.toString.call([])); // [object Array]
- ES6 的
isArray()
Array.isArray([]) //true
Array.isArray({}) //false