ES6

let const

var

  • 污染全局变量
  • 导致变量提升
  • 可以被重复声明

let

  • 块级作用域
  • 可以解决重复定义问题

const

常量 不会变的量 (地址不变即可)

const obj = {name: 1}
obj = {name: 2} // 只是改变常量的内容,没有改变常量的地址和大小

... 展开运算符

  • 合并数组
let arr1 = [1,2,3]
let arr2 = [4,5,6]
let arr3 = [...arr1, ...arr2]
  • 深拷贝 浅拷贝
let school = {name: 'zfpx'}
let my = {age: {count: 18}, name: 'jw'} // 里面的count是个对象,是个指针,存放的是个地址
// 把原来的my放在新对象里,用一个新的age把原来的age也拷贝一份
let newMy = {...my, age: {...my.age}}
let all = {...schooll, ...newMy} // 这里的age是18 深拷贝的实现
my.age.count = 100

// 自己实现一个深拷贝的方法
// 掌握类型判断 typeof instanceof object.prototype.toString.call() constructor

function deepClone(obj) {// 判断obj是null还是undefined
    if (obj==null) return obj
    // 不是对象就不用拷贝了
    if (obj instanceof Date) return new Date(obj)
    if (obj instanceof RegExp) return new RegExp(obj)
    if (typeof !== 'object') return obj
    // 剩下的是数组或者对象
    let cloneObj= new obj.constructor
    // 用for in 来遍历数组和对象
    for (let key in obj) { // 实现深拷贝
        if(obj.hasOwnProperty(key)) { // 遍历私有属性
            cloneObj[key] = deepClone(obj[key])
        }
    }
    return cloneObj
}
deepClone()

set / map 是两种存储解构

set 集合 不能重复的东西,放了,就白放了,去重

let s = new Set([1,2,3,4])
typeof s // set
// 基础数据类型 string number boolean undefined object 私有,bol
  • 添加和删除 并且没有顺序
s.add('5') // 增加
s.delete('5') // 删除
s.values()
  • 集合 并集 交集 差集
let s01 = [1,2,3,1,2]
let s02 = [3,4,5,1,2]

// 并集
function union() {
    let s1 = new Set(s01)
    let s2 = new Set(s02)
    console.log([...new Set([...s1,...s2])])
}
// 交集
function intersection() {
   return [...new Set(s01)].filter(v => new Set(s02).has(v))
}

// 差集
function diff() {
   return [...new Set(s01)].filter(v => !new Set(s02).has(v)) // 取出相差的部分留下来
}

map

map 是有key的,不能放重复

let m = new Map()
m.set('name', 'zfjg')
m.set('name', '124')
let obj = {name: 1}
m.set(obj, '456') // 这个obj的引用空间被set所引用
obj = null // 把obj清空 这个空间还是在的
console.log(obj) // null
console.log(m) // {name =>'123', {name:1} => '456'}

weakMap 弱链接 map的区别 回收机制

  • WeakMap 弱链接集合 的key 必须是对象类型
// 修改深拷贝代码 解决循环引用问题
function deepClone(obj, hash=new Map()) {// 判断obj是null还是undefined
    if (obj==null) return obj
    // 不是对象就不用拷贝了
    if (obj instanceof Date) return new Date(obj)
    if (obj instanceof RegExp) return new RegExp(obj)
    if (typeof !== 'object') return obj
    if (hash.has(obj)) return hash.get(obj) // 如果weakMap中有对象就直接返回
    // 剩下的是数组或者对象
    let cloneObj= new obj.constructor
    // 如果是对象,把他放到weakMap中,如果再拷贝这个对象存在 就直接返回这个对象即可
    hash.set(obj, cloneObj)
    // 用for in 来遍历数组和对象
    for (let key in obj) { // 实现深拷贝
        if(obj.hasOwnProperty(key)) { // 遍历私有属性
            cloneObj[key] = deepClone(obj[key], hash)
        }
    }
    return cloneObj
}
deepClone()

object.defineProperty es5 vue

// 通过object.defineProperty定义属性,可以增加拦截器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,755评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,305评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,138评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,791评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,794评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,631评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,362评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,264评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,724评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,900评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,040评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,742评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,364评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,944评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,060评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,247评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,979评论 2 355

推荐阅读更多精彩内容

  • es6总结 往期文章 ES5总结 1.es6简介 回顾javascrip组成:核心(ECMAScript)由ECM...
    理想三旬7阅读 588评论 0 5
  • 《ECMAScript6 入门》阮一峰 读书笔记 let和constlet声明的变量仅在块级作用域内有效,var声...
    亲爱的孟良阅读 720评论 1 2
  • 第一章:块级作用域绑定 块级声明 1.var声明及变量提升机制:在函数作用域或者全局作用域中通过关键字var声明的...
    BeADre_wang阅读 839评论 0 0
  • [TOC] 参考阮一峰的ECMAScript 6 入门参考深入浅出ES6 let和const let和const都...
    郭子web阅读 1,781评论 0 1
  • 1、新的声明方式 以前我们在声明时只有一种方法,就是使用var来进行声明,ES6对声明的进行了扩展,现在可以有三种...
    令武阅读 1,009评论 0 7