1. 声明对象
什么是对象(object)?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。对象是 JS 的核心概念,也是最重要的数据类型。
声明一个对象有两种常见的方法
方法一: 使用对象字面量的方式创建对象
let person = {
name: "张三",
gender: "男",
age: 18
};
上面代码,大括号就定义了一个对象,它被赋值给变量person,所以变量person就指向一个对象
方法二:使用new关键字
let person = new Object();
person.name = "张三";
person.gender = "男";
person.age = 18;
上面代码,先new创建一个空对象,然后再追加属性数据
2. 删
delete命令用于删除对象的属性,删除成功后返回true
let obj = { a:1 };
Object.keys(obj) // ["a"]
delete obj.a // true
obj.a // undefined
Object.keys(obj) // []
上面代码中,delete命令删除对象obj的p属性。删除后,再读取p属性就会返回undefined,而且Object.keys方法的返回值也不再包括该属性
但是删除一个本就不存在的属性,delete也不会报错,而是返回true
let obj = {};
delete obj.p // true
所以,我们不能根据delete命令的结果,认定某个属性存不存在
3. 查
查看一个对象本身的所有属性,可以使用Object.keys方法
let obj = {
p1: 1,
p2: 2
};
Object.keys(obj);
// ['p1', 'p2']
查看自身以及共有属性,可以使用console.dir()方法
let obj = {
p1: 1,
p2: 2
};
console.dir(obj)
// 返回一个Object对象,里面包含所有自身以及共有属性
两种查看属性的方法:
- 中括号语法:obj['name']
- 点语法:obj.name
obj.name 等价于 obj['name'] 不等价于 obj[name]
简单来说,这里的name是字符串,而不是变量
4. 增和改
修改和增加都是写属性
点运算符和方括号运算符,不仅可以用来读取值,还可以用来赋值
let obj = {foo:'xxx',bar:'yyy'};
obj.foo = 'Hello';
obj['bar'] = 'World';
obj.foo;//Hello
obj.bar;//World
增加和修改基本是一样的,已有属性则改;没有属性则增
5. in运算符和hasOwnProperty的区别
前面讲道,我们不能根据delete命令的结果,认定某个属性存不存在,那么我们用什么方法判断呢?
方法一:使用in运算符
let obj = {};
delete obj.p//true
'p' in obj//false
方法二:使用hasOwnProperty方法
let obj = {};
delete obj.p//true
obj.hasOwnProperty('p')//false
那么这两个方法有什么区别呢?
in运算符只能判断自身是否拥有此属性,而hasOwnProperty可以判断一个属性是自身的还是共有的
let obj = {}
'toString' in obj//true 说明in不会区分是不是自身的
obj.hasOwnProperty('toString')//false hasOwnProperty方法可以判断出toString方法不是自身的
本文部分内容引用:网道