JS 对象基本用法
声明对象的两种语法
- 使用 new 操作符
let obj = new Object();
obj.name = '麻婆豆腐';
obj.age = 18;
// 或
let obj = new Object({'name': '麻婆豆腐', 'age': 18});
- 使用对象字面量(一种简写形式)
let obj = {};
obj.name = '麻婆豆腐';
obj.age = 18;
// 或
let obj = {
name: '麻婆豆腐',
age: 18
}
注意:
- 键名是字符串,不是标识符,可以包含任意字符
- 引号可以省略,省略之后只能写标识符
- 引号省略之后键名仍然是字符串
如何删除对象的属性
let obj = {
name: '麻婆豆腐',
age: 18
}
delete obj.name // 删除 obj 的 name 属性
// 或
delete obj['age'] // 删除 obj 的 age 属性
'xxx' in obj === false:可以判断对象不包含该属性名obj.xxx === undefined:不能判断 'xxx' 是否为 obj 的属性,obj 可能不包含 xxx 属性,也可能包含 xxx 属性,但它的值为 undefined'xxx' in obj && obj.xxx === undefined:可以判断对象包含该属性,且值为 undefined
如何查看对象的属性
查看属性
- 点语法:
obj.xxx - 中括号语法:
obj['xxx'],注意中括号内的属性名必须加上引号表示字符串,否则意义就是代表一个变量 xxx
查看所有属性
Object.keys(obj):该方法返回一个由 obj 对象的所有键组成的数组console.dir(obj):在控制台打印出所有自身属性和原型中的共有属性
如何修改或增加对象的属性
直接赋值
let obj = {'name': '麻婆豆腐'}obj.name = '麻婆豆腐'obj.['name'] = '麻婆豆腐'
批量赋值
Object.assign(obj, {age: 18, gender: '川菜'})
该方法接受两个参数,分别是目标对象 obj 和 源对象 {age: 18, gender: '川菜'},然后将源对象的自有属性全部复制到目标对象,再返回目标对象。
修改或增加原型上的共有属性(不推荐修改)
obj.__proto__.toString = 'xxx'(不推荐)Object.prototype.toString = 'xxx'
修改隐藏属性 __proto__
obj.__proto__ = common(不推荐)Object.create(common):该方法将会以 common 对象为原型(prototype)创建一个新的对象
'name' in obj和obj.hasOwnProperty('name')的区别
'name' in obj只能判断对象 obj 是否有 name 属性,但无法判断 name 属性是自有属性还是原型上的共有属性;obj.hasOwnProperty('name')则可以判断 name 属性是否是 obj 的自有属性。
例如:
let obj = {}
'toString' in obj // true
obj.hasOwnProperty('toString') // false