温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JavaScript需要知道的小技巧有哪些

发布时间:2021-12-15 13:31:59 来源:亿速云 阅读:177 作者:小新 栏目:开发技术

这篇文章主要介绍JavaScript需要知道的小技巧有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

    一、神奇的扩展运算符

    扩展运算符(spread)是三个点( ... ), 可以说我在 JavaScript 中最喜欢的运算符了。我主要在以下 3 种情况下使用:

    1.拷贝数组

    const arr = [1, 2, 3, 4]
    const newArr = [...arr]
    
    console.log(newArr)  // [1, 2, 3, 4]

    2.合并数组

    const numArr = [1, 2, 3, 4]
    const alphaArr = ['a', 'b', 'c']
    const newArr = [...numArr, ...alphaArr]
    
    console.log(newArr) // [1, 2, 3, 4, 'a', 'b', 'c']

    3.展开对象

    const rectangle = { width: 10, height: 10 }
    const cube = { ...rectangle, length: 7 }
    
    console.log(cube) // {width: 10, height: 10, length: 7}

    二、进行空检查的最佳方法

    你还记得你写的第一个空检查代码吗?当 JavaScript 还没有现在这个完善时,我曾在我的旧代码中这样写:

    if (foo !== null && foo !== undefined) { }

    后来,我的生命被简单的 if 拯救!

    if (foo) {}

    只要条件值 foo 不是下列值,都将为真值“

    • null

    • undefined

    • NaN

    • 空字符串 ("")

    • false

    除了简单的 if 之外,现代 JavaScript 的可选链操作符 ?. 与空值合并运算符 ?? 可以使我们的代码更加简洁

    1.可选链操作符

    可选链操作符是访问嵌套对象属性的安全方式。这意味着在访问一长串对象属性时,我们不必进行多次空检查。当尝试访问可能不存在的对象属性时,可选链操作符将会使表达式更短、更简明

    以下示例检查客户地址的邮政编码是否为 null :

    const client = {
      name: 'Liu Xing',
      address: {
        zipcode: '1234'
      }
    }
    
    // 老的取值方式
    if (client && client.address && client.address.zipcode) {}
    // 更加现代的可选链操作符方式
    if (client?.address?.zipcode) {}

    2.空值合并运算符

    空值合并操作符( ?? )是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。

    const defaultMessage = 'Hello JavaScript 之禅'
    const msg = defaultMessage ?? 'Hello Liu Xing';
    console.log(msg); // Hello JavaScript 之禅'

    如果 defaultMessage 是 null 或者 undefined 则将打印出 Hello Liu Xing

    当我们按顺序使用它时,它会变得更强大:

    console.log(firstName ?? lastName ?? 'anonymous')

    在这个例子中,如果 firstName 不是 null/undefined,它将显示 firstName, 否则,如果 lastName 不是 null/undefined,它将显示 lastName。 最后,如果它们都为 null/undefined,它将显示“anonymous”。

    三、使用 .map()、.reduce() 和 .filter()

    接下来,谈论函数式和反应式编程的强大技术!几年前我第一次使用它时,它真的为我打开了一扇新的大门。 现在每次看到这些简洁的代码,我仍然被它的美丽所震撼。

    今天我举例介绍三个最常用的方法:map、reduce 和 filter。

    在新冠疫情 之前,我们去巴黎度假。于是他们去超市买了些东西。他们买了食物和日用品。但是所有的物品都是欧元,他们想知道每件物品的价格以及他们食物的人民币总成本。

    鉴于 1 欧元等于 7.18 日元。

    以传统方式,我们将使用经典循环来完成:

    const items = [
      {
        name: 'pineapple',
        price: 2,
        type: 'food'
      },
      {
        name: 'beef',
        price: 20,
        type: 'food'
      },
      {
        name: 'advocate',
        price: 1,
        type: 'food'
      },
      {
        name: 'shampoo',
        price: 5,
        type: 'other'
      }
    ]
    
    let sum = 0
    const itemsInYuan = []
    
    for (let i = 0; i < items.length; i++) {
      const item = items[i]
      item.price *= 7.18
      itemsInYuan.push(item)
      if (item.type === 'food') {
        sum += item.price
      }
    }
    
    console.log(itemsInYuan)
    /*
    [
      { name: 'pineapple', price: 14.36, type: 'food' },
      { name: 'beef', price: 143.6, type: 'food' },
      { name: 'advocate', price: 7.18, type: 'food' },
      { name: 'shampoo', price: 35.9, type: 'other' }
    ]
    */
    console.log(sum) // 165.14
    现在我们来使用现在 JavaScript 提供的函数式编程方法来实现这个计算。
    
    const itemsInYuan = items.map(item => {
      const itemInYuan = { ...item }
      itemInYuan.price *= 7.18
      return itemInYuan
    })
    
    const sum = itemsInYuan.filter(item => item.type === 'food').reduce((total, item) => total + item.price, 0)

    上述示例使用 map 方法将欧元转为日元,使用 filter 过滤掉非食品的项目,使用 reduce 来计算价格总和。

    以上是“JavaScript需要知道的小技巧有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI