脚本宝典收集整理的这篇文章主要介绍了分享干货ECMAScript 2015(ES6)提示和技巧非常有用,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
ecmascript 2015(又名ES6)已经存在了几年,可以巧妙地使用各种新功能。我想列出并讨论其中一些,因为我认为你会发现它们很有用。
如果您知道其他提示,请在评论中告诉我,我很乐意添加它们。
ES6提供了默认参数值,允许您设置在没有该参数的情况下调用函数时要使用的默认值。
在以下示例中,我们将required()
函数设置为两者a
和b
参数的默认值。这意味着如果其中一个a
或b
未被传递,required()
则调用该函数并且您将收到错误。
const required =()=> {throw new Error('Missing parameter')};
//如果缺少“a”或“b”,则下面的函数将抛出错误。
const add =(a = required(),b = required())=> a + b;
add(1,2)// 3
add(1)//错误:缺少参数。
Array的引导方法非常通用。它通常用于将项目数组转换为单个值。但是你可以用它做更多的事情。
提示:大多数这些技巧都依赖于初始值是一个数组或一个对象,而不是像字符串或变量这样的简单值。
2.1使用reduce同时执行map和filter * *
假设您有一个项目列表的情况,并且您想要更新每个项目(即地图),然后只过滤几个项目(即过滤器)。但这意味着您需要两次运行列表!
在下面的例子中,我们想要将数组中的项的值加倍,然后只选择那些大于50的项。注意我们如何使用强大的reduce方法来加倍(映射)然后过滤?这非常有效。
const numbers = [10, 20, 30, 40];
const doubledOver50 = numbers.reduce((finalList, num) => {
num = num * 2; //double each number (i.e. map)
//filter number > 50
if (num > 50) {
finalList.push(num);
}
return finalList;
}, []);
doubledOver50; // [60, 80]
如果仔细查看上面的示例(从2.1开始),您就会知道reduce可用于过滤或映射项目!
这是还原功能多样化的另一个例子。给定一个带括号的字符串,我们想知道它们是否是平衡的,即有相同数量的“(”和“)”,如果“(”在“之前”)。
我们可以轻松地在reduce中执行此操作,如下所示。我们只是保持一个counter
起始值为0 的变量。如果我们击中(
并计数下来,我们会计数)
。如果它们是平衡的,那么我们应该最终得到0
。
const isParensBalanced =(str)=> {
return str.splIT('')。reduce((counter,char)=> {
if(counter <0){// matched“)”before“(”
return counter;
} else if(char ==='('){
return ++ counter;
} else if(char ===')'){
return --counter;
} else {//匹配其他一些char
返回计数器;
}
},0); // < - 计数器的起始值
}
isParensBalanced('(())')// 0 < - balanced
isParensBalanced('(asDFds)')// 0 < - 平衡
isParensBalanced('(()')// 1 < - 不平衡
isParensBalanced(')(')// -1 < - 不平衡
有时您想要计算重复的数组项或将数组转换为对象。你可以使用reduce。
在下面的示例中,我们想要计算每种类型的汽车数量,并将此数字放入一个对象中。
VAR cars = [''宝马','奔驰','奔驰','特斯拉','宝马','丰田'];
var carsObj = cars.reduce(function(obj,name){
obj [name] = obj [name]?++ obj [name]:1;
return obj;
},{});
carsObj; // => {宝马:2,奔驰:2,特斯拉:1,丰田:1}
有时您想要删除不需要的属性 - 可能是因为它们包含敏感信息或者太大。我们可以简单地将这些道具提取到变量中,并将有用的道具保存在* rest *参数中,而不是迭代整个对象来移除它们。
在下面的示例中,我们要删除_internal
和tooBig
属性。我们可以将它们分配到_internal
和tooBig
变量,其余存放在*休息*参数cleanObject
,我们可以使用更高版本。
let {_internal, tooBig, ...cleanObject} = {el1: '1', _internal:"secret", tooBig:{}, el2: '2', el3: '3'};
console.LOG(cleanObject); // {el1: '1', el2: '2', el3: '3'}
在下面的示例中,该engine
属性是对象的嵌套car
对象。如果我们对该vin
属性感兴趣engine
,我们可以轻松地对其进行解构,如下所示。
var car = {
model: 'bmw 2018',
engine: {
v6: true,
turbo: true,
vin: 12345
}
}
const modelAndVIN = ({model, engine: {vin}}) => {
console.log(`model: ${model} vin: ${vin}`);
}
modelAndVIN(car); // => model: bmw 2018 vin: 12345
ES6带有一个扩展运算符(用三个点表示)。它通常用于解构数组值,但您也可以在对象上使用它。
在下面的示例中,我们使用sPRead运算符在新对象中进行传播。第二个对象中的属性键将覆盖第一个对象中的属性键。
在下面的示例中,属性键b and c
从object2
那些从覆盖object1
let object1 = {a:1,b:2,c:3}
let object2 = {b:30,c:40,d:50}
let merged = {... object1,... object2} //展开并重新加入合并的
console.log(合并)// {a:1,b:30,c:40,d:50}
let arr = [1,1,2,2,3,3];
let deduPEd = [... new Set(arr)] // [1,2,3]
将集转换为数组就像使用扩展运算符(…
)一样简单。您也可以在Sets上轻松使用所有Array方法!
假设我们有一个如下所示的集合,我们希望filter
它只包含大于3的项目。
let mySet = new Set([1,2,3,4,5]);
var filtered = [... mySet] .filter((x)=> x> 3)// [4,5]
很多时候,您的函数可能会返回数组中的多个值。我们可以通过使用数组解构来轻松获取它们。
let param1 = 1;
let param2 = 2;
//swap and assign param1 & param2 each others values
[param1, param2] = [param2, param1];
console.log(param1)// 2
console.log(param2)// 1
在下面的示例中,我们正在获取帖子/post
和相关评论/comments
。由于我们正在使用async / await
,该函数将结果返回到数组中。使用数组解构,我们可以简单地将结果直接分配给相应的变量。
async function getFullPost(){
return await Promise.all([
fetch('/ post'),
fetch('/ comments')
]);
}
const [post,comments] = getFullPost();
希望这篇文章很有帮助!如果你喜欢它,请给我一些鼓掌,让更多的人看到它。谢谢!
觉得可用,就经常来吧!@L_777_4@教程 脚本宝典 欢迎评论哦!巧夺天工,精雕玉琢。小宝典献丑了!以上是脚本宝典为你收集整理的分享干货ECMAScript 2015(ES6)提示和技巧非常有用全部内容,希望文章能够帮你解决分享干货ECMAScript 2015(ES6)提示和技巧非常有用所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。