ES6常用知识点
对象字面量增强
var name = 'Fhup'
var age = 18
var obj = {
name,
age,
foo(){
console.log(this);
},
bar: ()=>{
},
[name + '666']: 'fhf'
}
console.log(obj);
数组的解构
var arr = [1, 2, 3]
var [ x, y, z ] = arr
console.log(x);
console.log(y);
console.log(z);
var [ , itema, itemb] = arr
console.log(itema);
console.log(itemb);
var [item, ...newarrs] = arr
console.log(item, newarrs)
var [a, b, c, d = '666'] = arr
console.log(d);
对象的解构
var obj = {
name: 'Fhup',
age: 18,
sex: '男'
}
var { age, sex, name } = obj
console.log(name, age, sex);
var { name:myname } = obj
console.log(myname);
var { address: newAddress = '北京市' } = obj
console.log(newAddress)
模板字符串的使用
var name = 'Fhup'
var age = 18
var height = 1.88
console.log(`my name is ${name}`);
function myAge() {
return age / 2
}
console.log(`my age is ${ age * 2 }`)
console.log(`my age is ${ myAge() }`)
标签模板字符串的使用
function foo(m, n, x) {
console.log(m, n, x, '---------')
}
foo("Hello", "World", "xxx")
const name = "why"
const age = 18
foo`Hello${name}Wo${age}rld`
ES6参数的默认值
function foo(m, n) {
m = m || 'aaa'
n = n || 'bbb'
console.log(m, n);
}
function bar(m = 'xxx', n = 'yyy') {
console.log(m, n);
}
function printInfo({name} = {name: 'Fhup'}) {
console.log(name);
}
printInfo()
printInfo({name: '666'})
function bar(x, y, z = 100) {
console.log(x, y, z);
}
bar(3, 6)
function baz(x, y, z, q = 1, e) {}
console.log(baz.length)
ES6函数的剩余参数
function bar(...args) {
console.log(args)
console.log(arguments);
}
bar()
bar(1, 2, 3, 4, 5, 6, 7, 8, 9)
箭头函数没有原型
let foo = () => {
}
console.log(foo.prototype)
ES6中展开语法的使用
const names = ['aaa', 'bbb', 'ccc']
const name = 'fhf'
function foo(x, y, z) {
console.log(x, y, z);
}
foo(...names)
foo(...name)
const newNames = [...names, 'ddd']
console.log(newNames)
let info = { name: 'Fhup', age: 18 }
const obj = { ...info, address: '北京市' }
console.log(obj)
展开语法的浅拷贝
const info = {
name: 'fhf',
age: 18,
friend: { name:'xxx' }
}
const obj = {
...info,
name:'Fhup'
}
obj.name = 'xxx'
console.log(info.name)
obj.friend.name = 'yyy'
console.log(info.friend.name)
console.log(obj);
ES6数值的表示方式
const num1 = 100
const num2 = 0b100
const num3 = 0o100
const num4 = 0x100
console.log(num1, num2, num3, num4)
const num = 1_000_000_000
console.log(num);
Symbol的使用
var obj = {
name: 'Fhup',
age: 18,
friend: { name: 'fhf' }
}
const s1 = Symbol()
const s2 = Symbol()
console.log(s1 === s2)
const s3 = Symbol('aaa')
const s4 = Symbol('bbb')
console.log(s3.description)
const bar = {
[s1]: 'aaa',
[s2]: 'bbb'
}
bar[s3] = 'ccc'
Object.defineProperty(bar, s4, {
enumerable: true,
writable: true,
value: 'ddd',
configurable: true
})
console.log(bar);
console.log(bar[s1], bar[s2])
console.log(Object.keys(bar))
console.log(Object.getOwnPropertySymbols(bar))
const keys = Object.getOwnPropertySymbols(bar)
for(const key of keys) {
console.log(bar[key]);
}
const sa = Symbol.for('aaa')
const sb = Symbol.for('aaa')
console.log(sa === sb)
console.log(sa)
const aaa = Symbol.keyFor(sa)
const sc = Symbol.for(aaa)
console.log(sa === sc)
Set新增数据结构
const arr = [33,22,11,33,66,99,11]
const arrSet = new Set(arr)
console.log(arrSet)
const newarr = [...arrSet]
console.log(newarr)
console.log(arrSet.size)
arrSet.add(3000)
arrSet.add(7000)
const isDelete = arrSet.delete(7000)
console.log(arrSet, isDelete)
console.log(arrSet.has(3000))
arrSet.forEach(item => {
console.log(item);
})
for(const item of arrSet) {
console.log(item);
}
WeakSet的使用
const ws = new WeakSet()
const obj = {
name: 'Fhup'
}
ws.add(obj)
const personSet = new WeakSet()
class Person{
constructor() {
personSet.add(this)
}
run() {
if(!personSet.has(this)){
throw new Error('不能通过非构造方法创建的对象调用run方法~')
}
console.log('run~~~', this);
}
}
const p = new Person()
p.run.apply(this)
Map新增数据结构
const obj1 = { name: 'Fhup1' }
const obj2 = { name: 'Fhup2' }
const map = new Map()
map.set(obj1, 'aaa')
map.set(obj2, 'bbb')
map.set(1, 'ccc')
console.log(map);
const map2 = new Map([[1,1], [2,2], [3,3]])
console.log(map2, '---')
console.log(map.size)
map.set('Fhup', 'me')
console.log(map);
console.log(map.get('Fhup'))
console.log(map.has('Fhup'))
console.log(map.delete('Fhup'))
map.forEach((item, key) => {
console.log(item, key);
})
for(const item of map) {
console.log(item[0], item[1])
}
for(const [key, value] of map) {
console.log(key, value)
}
WeakMap的使用
const obj = {
name: 'Fhup',
age: 18
}
function objnameFn1() {
console.log('objnameFn1~执行');
}
function objnameFn2() {
console.log('objnameFn2~执行');
}
function objageFn1() {
console.log('objageFn1~执行');
}
function objageFn2() {
console.log('objageFn2~执行');
}
const wm = new WeakMap()
const map = new Map()
map.set('name', [objnameFn1, objnameFn2])
map.set('age', [objageFn1, objageFn2])
wm.set(obj, map)
obj.name = '666'
const targetmap = wm.get(obj)
const fns = targetmap.get('name')
for(const fnitem of fns) {
fnitem()
}