一、变量解构赋值的用途
1)交换变量的值
let x = 1; let y = 2; [x, y] = [y, x]
2)从函数返回多个值
// 返回一个数组 function example(){ return [1, 2, 4]; } let [a, b, c] = example() // 返回一个对象 function example(){ return { foo:1, bar: 2 } } let {foo, bar} = example(); 或者 ( {foo, bar} = example() )
3)提取JSON数据
let jsonData = { id:42, status: "OK", data: [867, 5309] }; let { id, status, data: number} = jsonData;
4)输入模块的指定方法
加载模块时,往往需要指定输入的方法,解构赋值使得输入语句非常清晰
const { SourceMapConsumer, SourceNode } = require("source-map")
5) 数组复制的功能
在es5中,开发者经常使用 concat() 方法克隆数组:
// 在 es5 中克隆数组 var colors = [ 'red', 'green', 'blue' ]; var clonedColors = colors.concat(); console.log(clonedColors); // "[red, green, blue]"
concat() 方法的设计初衷是连接两个数组,如果调用时不传递参数就会返回当前数组的副本。在es6中可以通过不定元素的语法来实现相同的目标:
let colors = [ 'red', 'green', 'blue' ] let [ ...clonedColors ] = colors; console.log(clonedColors); // "[red, green, blue]"
6) 结合Set集合,创建一个无重复元素的数组
function eliminateDuplicates(items) { return [...new Set(items)] } let numbers = [1, 2, 3, 3, 3, 4, 5]; let noDuplicates = eliminateDuplicates(numbers ); console.log(noDuplicates ); // [1,2,3,4,5]
7) 使用apply 把两个数据合并成一个
var arra1 = [{ name: '小智', age: 26 }] var arra2 = [{ name: '大智', age: 27 }] arra1.push.apply(arra1, arra2) console.log(arra1)
二、函数的用处(常见就不多说了)
1)创建立即执行函数表达式
// es5 let person = function(name) { return { getName: function() { return name; } } }('小智'); console.log(person.getName()); // 小智
在这段代码中,立即执行函数表达式创建了一个包含getName() 方法的新对象,将参数 name 作为该对象的一个私有成员返回给函数的调用者。
只要箭头函数包裹在小括号里,就可以用它实现相同的功能
// es6 let person = ((name) => { return { getName: function() { return name; } } })('小智2'); console.log(person.getName()); //小智
2.利用参数默认值可以指定某一个参数不得省略,如果省略就抛出一个错误。
function throwEmptyError() { throw new Error('参数不能为空'); } function foo(mustBeParams = throwEmptyError() ){ return mustBeParams(); } foo() // 参数不能为空
三、扩展对象的功能性让代码更加简洁
1) 可计算属性名
在es6中,使用方括号可以计算属性名称,如
let lastName ='last name'; let person = { "first name": 'Nicholas', [lastName]: 'Zakas' } console.log(person['first name']); // "Nicholas" console.log(person[lastName]); // Zakas
2) 利用 Object.assign()合并两个对象
function request(options) { let defaultOptions = { port: 8000, type: 'get' } Object.assign(options,defaultOptions); console.log(options) } request({url: 'http://www.baidu.com'})
四、结合es6简洁函数写法,高阶函数的应用
1) tab 函数
// 此处tap函数接受一个 vaule 并返回一个包含value 闭包函数,该函数被执行 const tap = (value) => (fn) => ( typeof(fn) === 'function' && fn(value), console.log(value) )
tab函数用处:假设你在遍历一个来自服务器的数组,并发现数据错了,因此你想调试一下,看看数组包含了什么,就可以用 tab函数
[1, 2 ,3, 4].forEach((a) => { tap(a)((a)=> { console.log(a) }) }); #### 2) once 函数
在很多情况下,我们只需要运行一次给定的函数,发起一次银行支付请求等,这时就可以用到 once 函数。
const once = (fn) => { let done = false; return function () { return done"htmlcode">const loggerHelper = (mode, initialMessage, errorMessage, lineNo) => { if (mode === 'DEBUG') { console.debug(initialMessage,errorMessage + 'at line:' + lineNo) } else if (mode === 'ERROR') { console.error(initialMessage,errorMessage + 'at line:' + lineNo) } else if (mode === 'WARN') { console.warn(initialMessage,errorMessage + 'at line:' + lineNo) } else throw "Wrong mode" }当开发者需要向控制台打印Stats.js文件中的错误时,可以用如下方式:
loggerHelper("ERROR", "ERROR At Stats.js", "Invalid argument passed", 23);这样对于 我们追求完美可读的程序员来说,可能是不太能接受的,现在用柯里来优化以上代码,
先简要说明什么是函数柯里化:柯里化是把一个多参数函数转换成一个嵌套的一元函数过程。
封装一个把把多参数函数转制为一元函数的curry函数
let curry = (fn) => { if (typeof fn !== 'function') { throw Error('No function provided'); } return function curriedFn(...args) { // 传入参数是否小于函数参数列表长度, if (args.length < fn.length) { return function() { return curriedFn.apply(null, args.concat([].slice.call(arguments))); } } return fn.apply(null, args) } } let errorLogger = curry(loggerHelper)("ERROR")("ERROR At Stats.js"); let debugLogger = curry(loggerHelper)("DEBUG")("ERROR")("Debug At Stats.js"); let warnLogger = curry(loggerHelper)("WARN")("Warn")("At Stats.js"); // 用于错误 errorLogger("Error message", 21) // 用于调试 debugLogger('Debug message', 233) // 用于警告 warnLogger("Warn message", 34);现在我们能够轻松引用上面的柯里化并在各自的上下文中使用它们了。
总结
以上所述是小编给大家介绍的ES6 中可以提升幸福度的小功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
ES6,提升幸福度
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 《庄心妍 实力唱将 发烧音乐精选集》[WAV+CUE][380MB]
- [音展纪念碟]2006年《TAA台湾第十六届国际HI-ENDHI-FI音响展》2cd[WAV]
- 中国音乐地图之听见西藏山歌牧歌酒歌2020[WAV分轨]
- 王宏伟2017-永远的红飘带[太平洋影音][WAV+CUE]
- 费翔.1997-NOW现在【第一中国】【WAV+CUE】
- 新格合唱团.1981-我唱你和2辑(滚石新格民歌系列)【新格】【WAV+CUE】
- 陈柏宇.2011-QUINQUENNIUM【SONY】【WAV+CUE】
- 雨果唱片-《金唛系列-蔷薇依韵琼瑶》WAV
- 陈百强《凝望(2012华纳LPCD45限量版)[DMI]》[WAV整轨]
- 模拟之声慢刻CD《徐小凤45周年》[德国母带][低速原抓WAV+CUE]
- 《庄心妍 实力唱将 发烧音乐精选集》[WAV+CUE][380MB]
- 《王菲 单曲合集》[FlAC/分轨][520MB]
- 《费玉清 原味再现 水长流》[WAV+CUE][430MB]
- 群星.1992-畅销榜老歌金曲10CD【风格】【WAV+CUE】
- 孙悦.2024-时光音乐会【金蜂】【WAV+CUE】