JS对象基本用法

169 阅读2分钟

一、声明对象的两种语法

一种是通过字面量的形式,另外一种是通过new Object()的形式

例如创建一个person对象 它有 name,age,sex等属性。

  1. 字面量形式(literal syntax)
var person = {name:"flechazo",age:18,gender:"male"};
  1. new Object()形式
var person = new Object();
person.name="flechazo";
person.age=18;
person.gender="male";

注意:在JS中声明对象,大多会这么写var a = {};很少会这么写:var a = new Object();

为什么?

{}叫做对象字面量,new Object()则是使用构造器函数。对象字面量的声明方式比构造器函数更加方便。所以在JS中建议以对象字面量的声明方式优先。

在JavaScript中,使用new关键字后,意味着做了如下四件事情:

  • 创建一个新的对象,这个对象的类型是object;

  • 设置这个新的对象的内部、可访问性和[prototype]属性为构造函数(指prototype.construtor所指向的构造函数)中设置的;

  • 执行构造函数,当this关键字被提及的时候,使用新创建的对象的属性;

  • 返回新创建的对象(除非构造方法中返回的是'无原型')。

二、如何删除对象的属性

  1. delete obj.xxx
  2. delete obj['xxx']

三、如何查看对象的属性

  1. 查看自身属性: Object.keys(person); //键

    image.png

  2. 查看自身和共有属性: console.dir(person);
    image.png

  3. 查看属性名及属性值: Object.entries(person); //键值对

    image.png

四、如何修改或增加对象的属性

  1. 直接赋值:
let person = {name:'flechazo'};
person.name = 'flechazo';
person['name'] = 'flechazo';

let key = 'name';
person[key] = 'flechazo';
  1. 批量赋值:
Object.assign(person,{gender:'female',age:18});
  1. 无法通过自身修改或增加共有属性,若偏要修改或增加原型上的属性
person.__proto__.toString = 'xxx';          //不推荐使用__proto__
window.Object.prototype.toString = 'xxx';   

一般来说不要修改原型,会引起很多问题

  1. 修改隐藏属性:不推荐__proto__,推荐使用Object.create
例:
    const p = {'name':'aaa','age': 18,'gender': 'male'};
    let person = Object.create(p);
    person.name = 'flechazo';
    let person2 = Object.create(p);
    person2.name = 'flechazo2';

image.png

五、'name' in obj和obj.hasOwnProperty('name') 的区别

  1. 'name' in obj无论自身属性还是原型链属性都会检测。
  2. hasOwnProperty()方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性。 //不检测原型链
console.log('toString' in person); //true 
console.log(person.hasOwnProperty('toString')); //false