-
属性简洁表示法
const age = 12 const name = "Amy" const person = {age,name}
-
方法名简写
const person = { SayHi(){ console.log("Hi") } //等同于 //SayHi:function(){ // console.log("Hi") //} }
-
Generator
函数-
简写
const person = { * myGenerator(){ yield 'hello' } }
-
概念
异步编程解决方案 包含多个内部状态的状态机 返回一个遍历器对象
function 关键字后面,函数名前面有一个符号 "*"
内部用 yield 生产不同内部状态
遍历器对象有个 next 方法,执行 next 会返回一个对象,对象上有两个属性 value:是yield 关键字后面表达式的值。 done:没有遇到 return 语句为 true ,遇到之后为 false
-
基本使用
function *helloGenerator(){ yield 'hello' yield 'world' return 'ending' } var hw = helloGenerator() console.log(hw.next()) //{done: false, value: 'hello'} console.log(hw.next()) //{done: false, value: 'world'} console.log(hw.next()) //{done: true, value: 'ending'} console.log(hw.next()) //{done: true, value: undefined} console.log(hw.next()) //{done: true, value: undefined}
-
-
-
属性名表达式
const obj = { ["he"+"llo"](){ //表达式一定要放在方框内 return 'Hi' } } obj.hello() //"Hi"
注:属性简洁表示法不能与属性表达式同时使用
-
对象拓展运算符
取出参数对象所有可遍历属性拷贝到当前对象
let person = {name:"Amy", age: 15} let someone = {...person} someone //{name: "Amy", age: 15}
也可用于合并
let age = {age: 15} let name = {name: "Tom"} let person = {...age, ...name} person //{age: 15, name: 'Tom'}
自定义属性和拓展运算符对象里面的属性的时候,拓展运算符优先级 > 自定义属性
如果拓展运算符是空对象或 null, undefined 则使用自定义属性
-
对象新方法
-
Object.assign(target,source,...)
将源对象所有可枚举属性复制到目标对象中
let target = {a: 1} let obj2 = {b: 2} let obj3 = {c: 3} Object.assign(target,obj2,obj3) target //{a: 1, b:2, c:3}
- 如果一个目标对象和源对象有同名属性,后面属性覆盖前面属性
- 如果参数不是对象则转化为对象返回
- assign 是浅拷贝
-
Object.is(value1, value2)
比较两个值是否严格相等,与(===)相似
-
与(===)的不同
NaN === NaN //false Object.is(NaN,NaN) //true +0 === -0 //true Object.is(+0,-0) //false
-
-