起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > Web前端 > 让Web前端开发代码更高效的JavaScript技巧有哪些?

让Web前端开发代码更高效的JavaScript技巧有哪些?

时间:2021-07-11 09:10:29来源:Web培训机构 作者:Web前端开发网 已有: 名学员访问该课程

前言: 今天小T要跟大家分享的文章是关于让Web前端开发代码更高效的JavaScript技巧有哪些?正在从事Web前端开发工作的小伙伴

今天小T要跟大家分享的文章是关于让Web前端开发代码更高效的JavaScript技巧有哪些?正在从事Web前端开发工作的小伙伴们都知道,JavaScript是Web前端开发人员必学的一门语言。今天,编为大家准备了一些让Web前端开发代码更高效的JavaScript技巧,下面我们一起来看一看吧!

01、async / await

如果你还陷入到回调地狱中,那么你应该回到2014年去开发你的代码。除非绝对必要(像第三方库需要或者性能原因),否则不要使用回调。Promise是非常好的解决回调地狱,但是当你的代码变得越来越大时,它也会变得不太好用。我现在的解决方案就是async / await,它极大提高了代码可读性以及简洁性。

在所有使用Promise的地方你都可以替换成await,在你需要返回Promise对象,简单await它并返回,为了使它不报错,你需要在定义函数的开头添加async。事实上,async / await就是Promise的语法糖。下面就是一个简单的例子:

(async function getData() {

const result = await axios.get('https://dube.io/service/ping')

const data = result.data

console.log('data', data)

return data

}

getData()

await 操作符用于等待一个Promise 对象。它只能在异步函数 async function 中使用。async / await是属于ES2021的内容,所以可能需要babel编译你的代码。不过现在的主流浏览器都已经支持了。

02、异步控制流

经常地,我们会遇到这样的需求,请求获取多个数据集并对每个数据集进行各自处理或者需要等所有异步回调完成后返回一个值。遇到这些情况,我是这么处理的:

for…of

假设我们的页面有多个Pokemon(口袋妖怪),需要获取到它们的详细的信息。我们不想等所有调用结束,特别是不知道它有多少次调用,我们仅想在它有调用返回时就更新我们的数据集。可以用for…of来遍历数组,在代码块里执行async,这样的话,只有每次await执行成功,代码才会继续往下执行。

这里要着重说明,这样做可能会导致性能瓶颈(当请求很多的时候),但像这样做才能到达预期的效果。请看下面的例子:

import axios from 'axios'

let myData = [{id: 0}, {id: 1}, {id: 2}, {id: 3}]

async function fetchData(dataSet) {

for(entry of dataSet) {

const result = await axios.get(`https://ironhack-pokeapi.herokuapp.com/pokemon/${entry.id}`)

const newData = result.data

updateData(newData)

console.log(myData)

}

}

function updateData(newData) {

myData = myData.map(el => {

if(el.id === newData.id) return newData

return el

})

}

fetchData(myData)

这个代码是能正常运行,你可以轻松地复制它到 code sandbox运行。

Promise.all

如果你想同时获取所有口袋妖怪的详情呢?你需要等待所有的请求的完成返回,这时简单使用

Promise.all:

import axios from 'axios'

let myData = [{id: 0}, {id: 1}, {id: 2}, {id: 3}]

async function fetchData(dataSet) {

const pokemonPromises = dataSet.map(entry => {

return axios.get(`https://ironhack-pokeapi.herokuapp.com/pokemon/${entry.id}`)

})

const results = await Promise.all(pokemonPromises)

results.forEach(result => {

updateData(result.data)

})

console.log(myData)

}

function updateData(newData) {

myData = myData.map(el => {

if(el.id === newData.id) return newData

return el

})

}

fetchData(myData)

for...of 和 Promise.all都是ES6以后提出来的,请确保你的环境能运行。

03、解构(Destructuring ) & 默认值

我们接着上面的那个例子,提取一部分代码:

const result = axios.get(`https://ironhack-pokeapi.herokuapp.com/pokemon/${entry.id}`)

const data = result.data

有一种简单的方法,解构从数组,或对象中获取一些属性(值)。像这样:

const { data } = await axios.get(...)

注意当解构的时候,通常要赋给它一个默认值。这样确保你不会得到undefined以及你不用自己手动地检查变量。

const { id = 5 } = {}

console.log(id) // 5

这个技巧也被运用到了函数参数中。例如:

function calculate({operands = [1, 2], type = 'addition'} = {}) {

return operands.reduce((acc, val) => {

switch(type) {

case 'addition':

return acc + val

case 'subtraction':

return acc - val

case 'multiplication':

return acc * val

case 'division':

return acc / val

}

}, ['addition', 'subtraction'].includes(type) ? 0 : 1)

}

console.log(calculate()) // 3

console.log(calculate({type: 'division'})) // 0.5

console.log(calculate({operands: [2, 3, 4], type: 'multiplication'})) // 24

这个例子起初看起来可能有点混乱,但是慢慢观察。当我们没有给函数传递参数的时候,就会使用默认值。一旦我们开始传递参数,仅会使用那些没有传递的参数的默认值。这样,减少了你对异常状态的处理。

04、真值 & 假值

当使用默认值,就可以不用对现有值进行一些额外的检查。但是了解你的变量是真值还是假值是非常棒的。它能提高你的代码扩展性,更具有说服力的以及简洁。我常看到下面一些写法:

if(myBool === true) {

console.log(...)

}

// OR

if(myString.length > 0) {

console.log(...)

}

// OR

if(isNaN(myNumber)) {

console.log(...)

}

为了用这些简洁的判断,你要充分理解js中真值,假值具体有哪些?这里概述一下:

假值:

1.字符串,但长度为0

2.数字0

3.false

4.undefined

5.null

6.NaN

真值

1.空数组

2.空对象

3.其他有值的数据.

注意:在判断真/假值,还应该注意到你使用的是等于'==',还是全等'===',这经常会导致bug。对我而言,经常是数字0。

05、逻辑运算与三元运算符

逻辑运算

逻辑运算是基于多个表达式真假的判断,注意到js是惰性求值的策略。逻辑运算一般返回一个布尔值。&& 和 || 运算符会返回一个指定操作数的值。来看这里:

console.log(true && true) // true

console.log(false && true) // false

console.log(true && false) // false

console.log(false && false) // false

console.log(true || true) // true

console.log(true || false) // true

console.log(false || true) // true

console.log(false || false) // false

进行的逻辑运算,是按照下面的规则进行的:

&&:第一个值为假值,则直接返回;如果为真值,则直接返回第二的值

||:第一个值为真,则直接返回;如果为假,则直接返回第二的值。

console.log(0 && {a: 1}) // 0

console.log(false && 'a') // false

console.log('2' && 5) // 5

console.log([] || false) // []

console.log(NaN || null) // null

console.log(true || 'a') // true

三元运算符

三元运算符和逻辑运算是相似的,但是它有3个部分:

condition ? expr1 : expr2

condition为进行条件判断的部分,将会得到真值或者假值

expr1为条件判断为真时返回的值

expr2为条件判断为假时返回的值

例如:

const

console.log(lang === 'German' ? 'Hallo' : 'Hello') // Hallo

console.log(lang ? 'Ja' : 'Yes') // Ja

console.log(lang === 'French' ? 'Bon soir' : 'Good evening') // Good evening

06、Optional Chaining

过去在 Object 属性链的调用中,很容易因为某个属性不存在而导致之后出现Cannot read property xxx of undefined的错误。为了确认需要向这样处理:

let data

if(myObj && myObj.firstProp && myObj.firstProp.secondProp && myObj.firstProp.secondProp.actualData) data = myObj.firstProp.secondProp.actualData

这样事冗余的,有一个新的提案的方法就是Optional Chaining,如下的形式:

const data = myObj?.firstProp?.secondProp?.actualData

我认为它是检查嵌套属性最佳方法,代码是如此的简洁。

这个特性可以说是非常实用了,不过它现在处于 stage-1 阶段。你可以在.babelrc文件中引入 @babel/plugin-proposal-optional-chaining插件来使用它。

07、Class properties & binding

在JavaScript中函数绑定也是经常的工作任务。现在,大家应该都是用箭头函数自动绑定this到这个类上的(这里可能有歧义,首先箭头函数里面是没有this 和arguments的,这里的this把它当成一个参数就行)。

如果不用箭头函数,我们就需要在构造函数绑定this,当类的方法很多的时候,这就显得很冗余。因此,建议和提倡在类里面用箭头函数。如:

class Counter extends React.Component {

constructor(props) {

super(props)

this.state = { count: 0 }

}

render() {

return(

<div>

<h1>{this.state.count}</h1>

<button onClick={this._increaseCount}>Increase Count</button>

</div>

)

}

_increaseCount = () => {

this.setState({ count: this.state.count + 1 })

}

}

使用箭头函数声明类中方法,它现在处于 stage-3 阶段。你可以在.babelrc文件中引入@babel/plugin-proposal-class-properties插件来使用它。

以上就是小T今天为大家分享的关于让Web前端开发代码更高效的JavaScript技巧有哪些的文章,希望本篇文章能够对正在从事Web前端开发工作的小伙伴们有所帮助。想要了解更多Web前端开发相关知识记得关注IT培训网Web培训官网。最后祝愿小伙伴们工作顺利!

*声明:内容与图片均来源于网络(部分内容有修改),版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

Web前端开发工程师,是从事Web前端开发工作的工程师。主要进行网站的开发、优化、完善的工作。网页制作是Web 1.0时代的产物,那时网站的主要内容都是静态的,用户使用网站的行为也以浏览为主。

一位好的Web前端开发工程师在知识体系上既要有广度,又要有深度,所以很多大公司即使出高薪也很难招聘到理想的Web前端开发工程师。现在说的重点不在于讲解技术,而是更侧重于对技巧的讲解。技术非黑即白,只有对和错,而技巧则见仁见智。以前会Photoshop和Dreamweaver就可以制作网页,现在只掌握这些已经远远不够了。无论是开发难度上,还是开发方式上,现在的网页制作都更接近传统的网站后端开发,所以现在不再叫网页制作,而是叫Web前端开发。Web前端开发在产品开发环节中的作用变得越来越重要,而且需要专业的Web前端开发工程师才能做好,这方面的专业人才近两年来备受青睐。Web前端开发是一项很特殊的工作,涵盖的知识面非常广,既有具体的技术,又有抽象的理念。简单地说,它的主要职能就是把网站的界面更好地呈现给用户。

文章出自:http://qh.itpxw.cn/peixun/web/202186130.html

文章标题:让Web前端开发代码更高效的JavaScript技巧有哪些?



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

你也许会喜欢如下的文章?
(责任编辑:深圳学历教育网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02