1.声明对象的两种语法
在JavaScript当中创建一个对象有两种语法:
一种是通过字面量的形式,另外一种是通过new Object()的形式。
例如:创建一个person对象,它有 name,age,sex等属性。
1.1 字面量形式(literal syntax)
var person = {name:"chen",age:12,sex:"male"};
1.2 new Object()形式
var person = new Object();
person.name="test";
person.age=12;
person.sex="male";1234
在JavaScript中,使用new关键字后,意味着做了如下四件事情:
a.创建一个新的对象,这个对象的类型是object。
b.设置这个新的对象的内部、可访问性和[[prototype]]属性为构造函数(指prototype.construtor所指向的构造函数)中设置的。
c.执行构造函数,当this关键字被提及的时候,使用新创建的对象的属性。
d.返回新创建的对象(除非构造方法中返回的是‘无原型’)。
1.3 两种方式比较
{}叫做对象字面量,new Object()则是使用构造器函数。
对象字面量的声明方式比构造器函数更加方便。
所以在JS中建议以对象字面量的声明方式优先。
2.如何删除对象的属性
按照下述操作即可删除 obj 的 xxx 属性
delete obj.xxx
delete obj[‘xxx’]
3.如何查看对象的属性
查看自身所有属性
Object.keys(obj)
查看自身+共有属性
console.dir(obj)
或者自己依次用 Object.keys 打印出 obj.__proto__
总结如下:
Object.keys(obj)
console.dir(obj)
obj['name']
obj.name // 记住这里的 name 是字符串
obj[name] // 记住这里的 name 是变量
4.如何修改或增加对象的属性
4.1 修改属性
改自身 obj['name'] = 'jack'
批量改自身 Object.assign(obj, {age:18, ...})
改共有属性 obj.__proto__['toString'] = 'xxx'
改共有属性 Object.prototype['toString'] = 'xxx'
改原型 obj.__proto__ = common
改原型 let obj = Object.create(common)
注:所有 __proto__ 代码都是强烈不推荐写的
4.2 增加属性
基本与4.1修改属性内容相同,对于已有属性进行改,没有属性则增。
5.‘name’ in obj和obj.hasOwnProperty(‘name’) 的区别
使用in判断对象中是否由属性时,若自身没有,在原型中找到也是返回true:
console.log("name" in p1);
使用hasOwnproperty()判断对象是否含有属性时,只有自身有才会返回true:
console.log(p1.hasOwnProperty("name"));