广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >写JavaScript的小技巧有哪些
  • 397
分享到

写JavaScript的小技巧有哪些

2024-04-02 19:04:59 397人浏览 八月长安
摘要

本篇内容介绍了“写javascript的小技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. a

本篇内容介绍了“写javascript的小技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1. 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是属于ES2017的内容,所以可能需要babel编译你的代码。不过现在的主流浏览器都已经支持了。

2. 异步控制流

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

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以后提出来的,请确保你的环境能运行。

3. 解构(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

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

4. 真值 & 假值

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

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。

  1. 逻辑运算与三元运算符

逻辑运算
逻辑运算是基于多个表达式真假的判断,注意到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 lang = 'German'
console.log(lang === 'German' ? 'Hallo' : 'Hello') // Hallo
console.log(lang ? 'Ja' : 'Yes') // Ja
console.log(lang === 'French' ? 'Bon soir' : 'Good evening') // Good evening

6. 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 插件来使用它。

7. 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>
                <h2>{this.state.count}</h2>  
                <button onClick={this._increaseCount}>Increase Count</button>
            </div>
        )
    }
    
    _increaseCount = () => {
        this.setState({ count: this.state.count + 1 })
    }
}

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

8.使用parcel

作为一个前端,你也肯定会遇到打包和编译代码情况。似乎webpack成为标准已经很长时间了。我从WEBpack 1版本就开始使用它了,当然那是痛苦的。为了弄懂它所有的配置项,我花了无数的时间才让它正常打包和编译。如果还有选择的机会,我是不会学习webpack的。恰巧几个月前用了 parcel ,从来没有发现配置可以如此简单!你不需要改动什么便能得到你预期的效果,当然你也可以修改配置项。它也是和webpack或babel一样是可配置的,同时也是快速的。如果你不知道parcel,我明确建议你去学习它!

当然,现在的主流标准还是webpack,webpack 4之后配置也简洁了,可以在学习parcel之后了解webpack,不说了,又要开始学习webpack 5

9. 写更多你自己的代码

谈到这个话题,我有很多想要分享讨论的东西。对于CSS,许多人更倾向于使用第三方组件库像bootstrap。对于JavaScript,我也看到很多人喜欢用Jquery以及一些小型的验证,滚动的库等等。虽然使用库是方便的,但是我强烈建议你能自己实现它,而不是盲目的安装npm包。当它变成一个很大的库或者框架的时候,整个团队都要构建它,像 moment.js 或者 react-datepicker ,而且当需求发生改变时,你想要改动它是困难的。所以,你应该写更多自己的组件。这将会带来三个重要的优点:

  1. 你很清楚你的代码发生了什么

  2. 同时,在你自己动手实现的过程中,你也能真正开始明白何为编程,以及库中代码是怎么运行的

  3. 你能阻止你的代码变得臃肿

在开始,使用npm包是方便的。你能花更多时间去实现自己的业务逻辑。但当那个包没有按照预期运行时,你又换了一个包,这时不得不花更多时间去读它的API才能使用它。当是你自己实现的库(组件)时,你能百分百用自己的用例来定制化开发它。

“写JavaScript的小技巧有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 写JavaScript的小技巧有哪些

本文链接: https://www.lsjlt.com/news/85595.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 写JavaScript的小技巧有哪些
    本篇内容介绍了“写JavaScript的小技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. a...
    99+
    2022-10-19
  • 编写JavaScript代码的小技巧有哪些
    小编给大家分享一下编写JavaScript代码的小技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1 Array.inc...
    99+
    2022-10-19
  • JavaScript有哪些小技巧
    这篇文章主要为大家展示了“JavaScript有哪些小技巧”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript有哪些...
    99+
    2022-10-19
  • 写Python有哪些小技巧
    本篇内容介绍了“写Python有哪些小技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 反转字符串虽然看似是很基础的操作,但是用cha...
    99+
    2023-06-16
  • JavaScript的简写技巧有哪些
    这篇文章主要讲解了“JavaScript的简写技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript的简写技巧有哪些”吧!1.三元操作符当想写if...else语句时,...
    99+
    2023-06-27
  • JavaScript的写法技巧有哪些
    本文小编为大家详细介绍“JavaScript的写法技巧有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript的写法技巧有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。过滤空值filter(...
    99+
    2023-06-29
  • 编写现代JavaScript代码的小技巧有哪些
    这篇文章主要介绍“编写现代JavaScript代码的小技巧有哪些”,在日常操作中,相信很多人在编写现代JavaScript代码的小技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2022-10-19
  • JavaScript的小技巧有哪些呢
    这期内容当中小编将会给大家带来有关JavaScript的小技巧有哪些呢,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、过滤唯一值Set类型是在ES6中新增的,它类似于数...
    99+
    2022-10-19
  • JavaScript有哪些简写技巧
    这篇文章主要介绍“JavaScript有哪些简写技巧”,在日常操作中,相信很多人在JavaScript有哪些简写技巧问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaSc...
    99+
    2022-10-19
  • JavaScript 简写技巧有哪些
    今天小编给大家分享一下JavaScript 简写技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.合并数...
    99+
    2023-07-02
  • 编写Python小技巧有哪些
    本篇内容主要讲解“编写Python小技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“编写Python小技巧有哪些”吧!1. List:all_equal功能实现:检验一个列表中的所有元素...
    99+
    2023-06-16
  • 常用JavaScript小技巧有哪些
    这篇文章主要介绍“常用JavaScript小技巧有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“常用JavaScript小技巧有哪些”文章能帮助大家解决问题。1.通过条件判断向对象添加属性con...
    99+
    2023-06-30
  • 实用的JavaScript优化小技巧有哪些
    这篇文章主要为大家展示了“实用的JavaScript优化小技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“实用的JavaScript优化小技巧有哪些”这...
    99+
    2022-10-19
  • 非常实用的JavaScript小技巧有哪些
    这篇文章主要为大家展示了“非常实用的JavaScript小技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“非常实用的JavaScript小技巧有哪些”这...
    99+
    2022-10-19
  • JavaScript需要知道的小技巧有哪些
    这篇文章主要介绍JavaScript需要知道的小技巧有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、神奇的扩展运算符扩展运算符(spread)是三个点( ... ), 可以说我在 JavaScript 中最喜...
    99+
    2023-06-22
  • 写css的技巧有哪些
    本文小编为大家详细介绍“写css的技巧有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“写css的技巧有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。技巧一每当你写CSS...
    99+
    2022-10-19
  • 写Python的技巧有哪些
    本篇内容主要讲解“写Python的技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“写Python的技巧有哪些”吧!1.导入模块你是不是经常对调用模块时输入一长串模块索引感到头疼?说实在的...
    99+
    2023-06-16
  • JavaScript的技巧有哪些
    本篇文章给大家分享的是有关JavaScript的技巧有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。不少人有五年的 JavaScript ...
    99+
    2022-10-19
  • Vue的小技巧有哪些
    这篇文章主要介绍“Vue的小技巧有哪些”,在日常操作中,相信很多人在Vue的小技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue的小技巧有哪些”的疑惑有所帮助!接...
    99+
    2022-10-19
  • PyCharm的小技巧有哪些
    PyCharm的小技巧有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。PyCharm小技巧,帮助大家提升工作效率!# 0. PyCharm 常用快捷键# 1. 查看使用...
    99+
    2023-06-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作