Skip to content
此页目录
本文总阅读量

JavaScript ES6 Object 对象

简写

对象简写

js
const age = 12;
const name = "Amy";
const person = {age, name}; // {age: 12, name: "Amy"}
// 等同于 person = {age: age, name: name}

方法简写

js
const person = {
 sayHi(){
  console.log("Hi");
 }
}

Generator 函数,要在前面加星号

js
const obj = {
 * myGenerator() {
  yield 'hello world';
 }
};

属性名表达式

  • [变量]
js
let a="aaa";
let obj={
  [a]: "bbb"
}

const obj = {
 ["he"+"llo"](){
  return "Hi";
 }
}
obj.hello(); // "Hi"

合并对象

js
let age = {age: 15};
let name = {name: "Amy"};
let person = {...age, ...name}; // {age: 15, name: "Amy"}

注意

如果两个对象有同名的属性会被覆盖(数组也是同理)

Object.assign()

js
Object.assign(target, source_1, ···)

将后面所有可枚举的属性赋值到target对象中。重复的值会覆盖

js
let target = {a: 1};
let object2 = {b: 2};
let object3 = {c: 3};
Object.assign(target,object2,object3); // {a: 1, b: 2, c: 3}
// 第一个参数是目标对象,后面的参数是源对象

只有一个参数不是对象,也会转换为对象返回

js
Object.assign(3); // Number {3}

第一个参数时 null 或 undefined 会报错

js
Object.assign(null); // TypeError: Cannot ...

null 和 undefined 放第二个之后会跳过

js
Object.assign(1,undefined); // Number {1}
// 注意: assign 的属性拷贝是浅拷贝
let sourceObj = { a: { b: 1}};
let targetObj = {c: 3};
Object.assign(targetObj, sourceObj);
targetObj.a.b = 2; // 原始值修改
sourceObj.a.b; // 2 已经拷贝的值也会跟着变

同名属性会被替换

js
targetObj = { a: { b: 1, c:2}};
sourceObj = { a: { b: "hh"}};
Object.assign(targetObj, sourceObj);// {a: {b: "hh"}}

数组的处理

js
Object.assign([2,3], [5]); // [5,3] 下标0被覆盖

链判断运算符

js
const firstName = message?.body?.user?.firstName || 'default';
const fooValue = myForm.querySelector('input[name=foo]')?.value
// 如果左侧的值为 null或undefined 则不再往下运算
iterator.return?.() // 判断方法是否存在

三种用法

js
a?.b
// 等同于
a == null ? undefined : a.b

a?.[x]
// 等同于
a == null ? undefined : a[x]

a?.b()
// 等同于
a == null ? undefined : a.b()

a?.()
// 等同于
a == null ? undefined : a()

评论

交流群