对象
一、对象.属性
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