什么是对象?
什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。
let obj = {
name: "yeah",
song: "mbti"
};
上面代码中,大括号就定义了一个对象,它被赋值给变量obj,所以变量obj就指向一个对象。该对象内部包含两个键值对(又称为两个“成员”),第一个键值对是name: "yeah",其中name是“键名”(成员的名称),字符串yeah是“键值”(成员的值)。键名与键值之间用冒号分隔。第二个键值对是song: "mbti",song是键名,mbti是键值。两个键值对之间用逗号分隔。
注意: 对象的所有键名都是字符串,加不加引号都可以,就算引号省略了,键名也还是字符串。
声明对象的两种方法
- 简便写法
let student = {
'name': 'Harry',
'age': 12
};
- 正规写法
let student = new Object({'name': 'Harry'});
删除对象的属性
delete命令用于删除对象的属性,删除成功后返回true。delete obj.xxxdelete obj['xxx']- 要区分“属性值为undefined” 和 “不含属性名”
obj.xxx === undefined不能用来判断该对象不含有xxx的属性名, 比如在var obj2 = {age: undefined}中,obj2.age === undefined为true,但此时obj2这个对象含有age属性名。- 判断对象中不含属性名,应该用
'xxx' in obj来判断。例如上面栗子中,'age' in obj2返回值为true。 - 没有就是没有,undefined就是undefined。
- 注意,删除一个不存在的属性,
delete不报错,而且返回true。 - 举个例子:
var obj = { p: 1 };
Object.keys(obj) // ["p"]
delete obj.p // true
obj.p // undefined
Object.keys(obj) // []
查看对象的属性(属性的读取)
- 查看对象自身所有属性:
Object.keys(obj) - 查看自身+共有属性:
console.dir(obj) - 判断一个属性是自身的还是共有的:
obj.hasOwnProperty('xxx') - 查看某一个属性:
- 中括号语法:
obj['key'] - 点运算符语法:
obj.key - 注意:
obj['name']等价于obj.name,obj[name]不等价于obj.name。obj.name里的name是字符串,而不是变量。所以,如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。
- 中括号语法:
- 举个栗子
var foo = 'bar';
var obj = {
foo: 1,
bar: 2
};
obj.foo // 1
obj[foo] // 2
修改或增加对象的属性
- 直接赋值:点运算符和方括号运算符,不仅可以用来读取值,还可以用来赋值。
var obj = {};
obj.foo = 'Hello';
obj['bar'] = 'World';
//方括号运算符内部还可以使用表达式。
obj['na' + 'name'] = 'Harry';
-
批量赋值:
Object.assign(obj, {age: 18, gender: 'female'})
'name' in obj 和 obj.hasOwnProperty('name') 的区别
'name' in obj 仅能判断对象是否拥有该属性,不能判断该属性是自身的还是与原型共有的。obj.hasOwnProperty('name')可以判断一个属性是否是自身的。
let car = { brand: "BMW", color: "Black" };
'age' in car //false
'color' in car //true
'toString' in car //true
car.hasOwnProperty("toString") //false
car.hasOwnProperty("brand") //true