ES6总结

126

Object.create(prototype, {descriptors})

作用:以指定对象为原型创建新的对象

value: 指定值

writable:当前属性值是否是可修改的,默认false

configurable: 当前属性是否可以被删除, 默认false

enumerable:当前属性是否能用for in 枚举,默认false

const obj = { username: '页面仔小杨', age: 18 }
let obj1 = Object.create(obj, {
  sex: {
    value: 1,
    writable: true,
    configurable: true,
    enumerable: true
  }
})

Object.defineProperties(object, descriptors)

作用:为指定对象定义扩展多个属性

get: 用来获取当前属性值的回调函数

set: 修改当前属性值的触发的回调函数,并且实参即为修改后的值

let obj2 = { firstName: '页面仔', lastName: '小杨' }
Object.defineProperties(obj2, {
  fullName: {
    get: function() {
      console.log('==========')
      return `${this.firstName} ${this.lastName}`
    },
    set: function(data) {
      console.log(data)
      const names = data.split(' ')
      this.firstName = names[0]
      this.lastName = names[1]
    }
  }
})
obj2.fullName = "ha ha"
console.log(obj2.fullName)

let const

let代替了var,具有块级作用域

解构赋值

let [a, b, c] = arr
const { body: { name, description }, url } = req

模版字符串

const name = '页面仔小杨'
console.log(`hello ${name}`)

箭头函数

1.函数体只有一条语句或者表达式的时候 {} 可以省略, 自动返回语句执行的结果或者表达式的结果

2.没有自己的this,定义的时候处在的对象就是它的this

三点运算符

function(...value) {
  console.log(value)
}
const arr = [3,4]
const arr1 = [1, 2, ...arr, 5]

in的用法

in是用来判断对象或者数组中是否存在某个值的。我们先来看一下用in如何判断对象里是否有某个值

let obj={
    a:'js',
    b:'页面仔小杨'
}
console.log('a' in obj)  // true

Promise/await

promise三个状态: pending fullfilled rejected

Symbol

let symbol1 = Symbol("hello")
console.log(symbol1)   // Symbol(KK)
typeof(symbol1)        // "symbol"
 
// 相同参数 Symbol() 返回的值不相等
let symbol2 = Symbol("hello")
console.log(symbol1 === symbol2)       // false

let syObject = {};
syObject[symbol1] = "hello";
console.log(syObject);    // {Symbol(hello): "hello"}

Symbol 值作为属性名时,该属性是公有属性不是私有属性,可以在类的外部访问。但是不会出现在 for…in 、 for…of 的循环中,也不会被 Object.keys() 、 Object.getOwnPropertyNames() 返回。如果要读取到一个对象的 Symbol 属性,可以通过 Object.getOwnPropertySymbols() 和 Reflect.ownKeys() 取到

Iterator

const items = [1, 2, 3, 4, 5]
const it = items[Symbol.iterator]()
console.log(it.next()) // { value: 1, done: false }
console.log(it.next()) // { value: 2, done: false }
console.log(it.next()) // { value: 3, done: false }
console.log(it.next()) // { value: 4, done: false }
console.log(it.next()) // { value: 5, done: false }
console.log(it.next()) // { value: undefined, done: true }

迭代器是协议,可迭代的数据结构:Array String Map Set

Generator

在 function 后面,函数名之前有个 *

函数内部有 yield 表达式

function* foo(){
    let x = yield 1;
    console.log(x)
    yield 2;
    yield 3;
}
let f = foo();
f.next();  // {value: 1, done: false}
f.next(10)
// 10
// {value: 2, done: false}
f.return("foo");  // {value: "foo", done: true}
f.next();  // {value: undefined, done: true}

Async

async取代了Generator函数的*,await取代了Generator的yield

Map、Set

Map与Object的区别

不同点MapObject
任意值只能是字符串/Symbol
键值的有序性有序的无序的
获取键值对的个数myMap.size自己手动计算
覆盖原来的值Object基于原型链,键名产生冲突

Set 对象存储任何类型的唯一值,无论是原始值或者是对象引用

//  数组去重
let arr = [1,1,2,2,3,3,4,5]
console.log([...new Set(arr)])
console.log(Array.from(new Set(arr)));

Proxy

可进行预处理

let pro = new Proxy({
    add: function (val) {
        return val + 1;
    },
    name: '页面仔小杨'
}, {
        get: function(target, key){
            console.log('get')
            return target[key]
        },
        set: function(target, key, value, receiver){
            console.log(`setting ${key} = ${value}`)
            return target[key] = value
        }

    });

console.log(pro.name)
pro.name='页面仔小杨2'
console.log(pro.name)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值