JS对象的基本用法

146 阅读2分钟

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命令删除对象objp属性。删除后,再读取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方法不是自身的

本文部分内容引用:网道