[译] 5 分钟学习一些优雅的 JavaScript 技巧
栏目: JavaScript · 发布时间: 6年前
内容简介:原文:作者:Alcides Queiroz
原文: Learn these neat JavaScript tricks in less than 5 minutes
作者:Alcides Queiroz
5 分钟学习一些优雅的 JavaScript 技巧 —— 专业的省时技巧
1. 清空或截取数组
一个简单的清空或者截取数组的方法,就是修改它的 length
属性:
const arr = [11, 22, 33, 44, 55, 66]; // 截取 arr.length = 3; console.log(arr); //=> [11, 22, 33] // 清空 arr.length = 0; console.log(arr); //=> [] console.log(arr[2]); //=> undefined
2.用对象解构来模拟参数命名
当你要给函数传入带有一系列配置的参数时,你很可能会使用配置对象的方法,例如:
doSomething({ foo: 'Hello', bar: 'Hey!', baz: 42 }); function doSomething(config) { const foo = config.foo !== undefined ? config.foo : 'Hi'; const bar = config.bar !== undefined ? config.bar : 'Yo!'; const baz = config.baz !== undefined ? config.baz : 13; // ... }
在 JavaScript 中模拟命名参数,是一个陈旧但是很有效的方式。这样函数调用看起来舒服多了。另一方面,配置对象的控制逻辑也不需要这么冗长,使用 ES2015 的对象解构,可以避免这个问题:
function doSomething({ foo = 'Hi', bar = 'Yo!', baz = 13 }) { // ... }
如果你想让配置对象是可选的,也很简单:
function doSomething({ foo = 'Hi', bar = 'Yo!', baz = 13 } = {}) { // ... }
3.对数组使用对象解构
使用对象解构把数组项赋值给特定的变量:
const csvFileLine = '1997,John Doe,US,john@doe.com,New York'; const { 2: country, 4: state } = csvFileLine.split(',');
译注:这里把数组下标为 2 的值( US
)赋给变量 country
; 下标为 4 的值( New York
)赋给变量 state
。
4. switch 中使用范围
注意:经过一番思考,我决定把这个技巧和文中其他的区别开来。这个并不是一个节约时间的技巧,在真正代码中也不适合使用。记住:这种场景下使用 if
通常会更好。
和文中其他的技巧不同,这个方法主要是为了好奇而不是实用。
总之,由于历史原因我会保留这个技巧在这篇文章中。
这里有个简单的在 switch 语句中使用范围的技巧:
function getWaterState(tempInCelsius) { let state; switch (true) { case (tempInCelsius <= 0): state = 'Solid'; break; case (tempInCelsius > 0 && tempInCelsius < 100): state = 'Liquid'; break; default: state = 'Gas'; } return state; }
5. 使用 async/await
时, await
多个 async
函数
可以使用 Promise.all
来 await
多个 async 函数执行完成:
await Promise.all([anAsyncCall(), thisIsAlsoAsync(), oneMore()])
6. 创建纯对象
你可以创建 100% 的纯对象(pure object), 不继承 Object
的任何属性和方法(例如: constructor
、 toString()
等等)。
const pureObject = Object.create(null); console.log(pureObject); //=> {} console.log(pureObject.constructor); //=> undefined console.log(pureObject.toString); //=> undefined console.log(pureObject.hasOwnProperty); //=> undefined
7. 格式化 JSON 代码
JSON.stringify
能做的不只是简单的字符串化对象,你还可以使用它来格式化 JSON 的输出:
const obj = { foo: { bar: [11, 22, 33, 44], baz: { bing: true, boom: 'Hello' } } }; // The third parameter is the number of spaces used to // beautify the JSON output. JSON.stringify(obj, null, 4); // =>"{ // => "foo": { // => "bar": [ // => 11, // => 22, // => 33, // => 44 // => ], // => "baz": { // => "bing": true, // => "boom": "Hello" // => } // => } // =>}"
8. 数组去重
只使用 ES2015 的 Set
和展开运算符,就可以轻松实现数组去重:
const removeDuplicateItems = arr => [...new Set(arr)]; removeDuplicateItems([42, 'foo', 42, 'foo', true, true]); //=> [42, "foo", true]
9.扁平化多维数组
使用展开运算符可以轻松的扁平化数组:
const arr = [11, [22, 33], [44, 55], 66]; const flatArr = [].concat(...arr); //=> [11, 22, 33, 44, 55, 66]
可惜的是,上面的这个技巧只对二维数组有效。但是通过递归,我们可以使它也适用于二维以上的数组:
function flattenArray(arr) { const flattened = [].concat(...arr); return flattened.some(item => Array.isArray(item)) ? flattenArray(flattened) : flattened; } const arr = [11, [22, 33], [44, [55, 66, [77, [88]], 99]]]; const flatArr = flattenArray(arr); //=> [11, 22, 33, 44, 55, 66, 77, 88, 99]
就这些啦!希望这些优雅的小技巧可以帮你写出更好更漂亮的 JavaScript。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- iOS开发学习路线 +技巧整理
- [译] 深度学习的模型调试小技巧
- Go语言学习技巧之命名规范
- 检验机器学习可解释性的技巧
- 如何学习性能测试?LoadRunner小技巧集锦
- Go语言学习技巧之如何合理使用Pool
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
刘大猫的财富之旅
刘欣、刘大猫 / 新华出版社 / 2017-7-21 / 58.00元
作者刘大猫是一名90后的互联网连环创业者,26岁的他通过互联网创业收获到了财富,不仅仅是物质财富,还有认知的财富。 与其他创业类书籍不通的是,这本书非常真实,务实。书中没有任何大道理鸡汤,作者用平实的语言记录了创业以来遇到的种种事情,变化,困境,以及阶段性的成绩,记录了作者务实,鲜活的创业青春。一起来看看 《刘大猫的财富之旅》 这本书的介绍吧!