XingYun blog
  • JS基础

    • 图解js原型链
    • JS Event Loop
    • 对象的底层数据结构
    • 让你的JavaScript代码简单又高效
    • 函数参数按值传递
    • 判断数据类型
    • 浮点数精度问题和解决办法
    • 常用方法snippet
    • 实现Promise
    • 防抖和节流
    • 巧用sort排序
  • CSS && HTML

    • CSS也需要性能优化
    • class命名规范
    • em、px、rem、vh、vw 区别
    • CSS揭秘阅读笔记
  • 浏览器

    • 浏览器是如何渲染页面的
    • 重排和重绘
    • BOM浏览器对象模型
    • DOM事件
    • 浏览器存储
  • 数据结构

    • JS实现链表
    • JS实现栈与栈应用
    • JS实现常见排序
    • 哈夫曼编码
    • MD5算法
  • vue原理浅析

    • Vue虚拟dom与Diff算法
    • 前端打包文件的缓存机制
    • vue数组为什么不是响应式
    • v-for为什么不能用index做key
  • 前端工程化

    • 浏览器是如何渲染页面的
    • 前端打包需要gzip压缩吗
    • 前端打包文件的缓存机制
    • webpack loader和plugin
  • 轮子&&组件库

    • 实现水波浪进度球
  • 文字转语音mp3文件
  • 文件上传前后端实现
  • moment.js给定时间获取自然月、周的时间轴
  • 实现文件上传功能
  • 批量下载照片
  • leaflet改变坐标原点
  • 网络

    • 有了MAC地址 为什么还需要IP地址
    • 为什么IP地址老是变
    • 我们为什么需要IPV6
    • TCP与UDP
  • 计算机组成原理

    • ASCII、Unicode、UTF-8和UTF-16
  • VSCode

    • VSCode图片预览插件 Image preview
    • rsync:linux间的高效传输工具

XingYun

冲!
  • JS基础

    • 图解js原型链
    • JS Event Loop
    • 对象的底层数据结构
    • 让你的JavaScript代码简单又高效
    • 函数参数按值传递
    • 判断数据类型
    • 浮点数精度问题和解决办法
    • 常用方法snippet
    • 实现Promise
    • 防抖和节流
    • 巧用sort排序
  • CSS && HTML

    • CSS也需要性能优化
    • class命名规范
    • em、px、rem、vh、vw 区别
    • CSS揭秘阅读笔记
  • 浏览器

    • 浏览器是如何渲染页面的
    • 重排和重绘
    • BOM浏览器对象模型
    • DOM事件
    • 浏览器存储
  • 数据结构

    • JS实现链表
    • JS实现栈与栈应用
    • JS实现常见排序
    • 哈夫曼编码
    • MD5算法
  • vue原理浅析

    • Vue虚拟dom与Diff算法
    • 前端打包文件的缓存机制
    • vue数组为什么不是响应式
    • v-for为什么不能用index做key
  • 前端工程化

    • 浏览器是如何渲染页面的
    • 前端打包需要gzip压缩吗
    • 前端打包文件的缓存机制
    • webpack loader和plugin
  • 轮子&&组件库

    • 实现水波浪进度球
  • 文字转语音mp3文件
  • 文件上传前后端实现
  • moment.js给定时间获取自然月、周的时间轴
  • 实现文件上传功能
  • 批量下载照片
  • leaflet改变坐标原点
  • 网络

    • 有了MAC地址 为什么还需要IP地址
    • 为什么IP地址老是变
    • 我们为什么需要IPV6
    • TCP与UDP
  • 计算机组成原理

    • ASCII、Unicode、UTF-8和UTF-16
  • VSCode

    • VSCode图片预览插件 Image preview
    • rsync:linux间的高效传输工具
  • leaflet改变坐标原点
  • 补间动画gsap与tween
  • 文字转语音mp3文件
  • JavaScript引入
  • JavaScript高级程序设计阅读笔记
  • Javascript函数参数按值传递传递
  • JS防抖和节流
  • 手写JS常用方法
  • 手写Promise
  • JS Event Loop
  • 重排和重绘
  • em、px、rem、vh、vw 区别
  • css也需要性能优化
  • 图解 js 原型链
  • js函数参数按值传递
  • BOM浏览器对象模型
  • DOM
  • 事件
  • js对象数组sort按需排序
  • 文件上传功能技术选型和前后端实现
  • 前端图片处理
  • 让你的JavaScript代码简单又高效
    • BEM:class命名规范
    • 前端规范-CSS属性那么多(杂),怎么排序
    • TypeScript Tips
    • jsx
    • canvas基础
    • 前端日志
    • 浏览器存储
    • CSS世界阅读笔记
    • CSS揭秘阅读笔记
    • js变量命名常用规范词
    • 你不知道的JavaScript阅读笔记
    • js对象的底层数据结构
    • js判断数据类型
    • JS浮点数精度问题和解决办法
    • js作用域
    • js堆栈溢出和内存泄漏
    • 浏览器是如何渲染页面的
    • 疑难杂症和踩坑问题合集
    • 免费在线API收集
    • 原生JS实现Ajax请求
    • cookie、session、localStorage、sessionStorage的区别
    • Sass与Less
    • arrayBuffer、blob、file对象
    • TypeScript基础
    • 前端
    XingYun
    2022-01-13
    目录

    让你的JavaScript代码简单又高效

    偶然看到一句话

    前端就是面向规范编程

    确实,无论是 CSS、HTML、JS 都需要注重规范,如果放飞自我很容易写出自己都看不懂的垃圾代码

    下面总结一些让 JS 代码变得易懂、简洁、干净的要点

    # 使用默认参数简化参数

    🙅‍♂️🙅‍♂️🙅‍♂️

    function getFloor(floor) {
      const res = floor || 1
      // ...code...
    }
    
    1
    2
    3
    4

    👍👍👍

    function getFloor(floor = 1) {
      const res = floor
      // ...code...
    }
    
    1
    2
    3
    4

    # Object.assign 和扩展运算符...合并对象参数

    🙅‍♂️🙅‍♂️🙅‍♂️

    const menuConfig = {
      title: null,
      body: 'Bar',
      buttonText: null,
      cancellable: true
    }
    
    function createMenu(config) {
      config.title = config.title || 'Foo'
      config.body = config.body || 'Bar'
      config.buttonText = config.buttonText || 'Baz'
      config.cancellable =
        config.cancellable !== undefined ? config.cancellable : true
    }
    
    createMenu(menuConfig)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    👍👍👍

    const menuConfig = {
      title: 'Order',
      // User did not include 'body' key
      buttonText: 'Send',
      cancellable: true
    }
    
    function createMenu(config) {
      const defaultConfig = {
        title: 'Foo',
        body: 'Bar',
        buttonText: 'Baz',
        cancellable: true
      }
    
      // 1. Object.assign
      let finalConfig = Object.assign(defaultConfig, config)
      // 2. Spread syntax ...
      let finalConfig = { ...defaultConfig, ...config }
    
      return finalConfig
      // config now equals: {title: "Order", body: "Bar", buttonText: "Send", cancellable: true}
      // ...
    }
    
    createMenu(menuConfig)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

    # 让你的 class 支持链式调用

    🙅‍♂️🙅‍♂️🙅‍♂️

    class Car {
      constructor(make, model, color) {
        this.make = make
        this.model = model
        this.color = color
      }
    
      setMake(make) {
        this.make = make
      }
    
      setModel(model) {
        this.model = model
      }
    
      setColor(color) {
        this.color = color
      }
    
      save() {
        console.log(this.make, this.model, this.color)
      }
    }
    
    const car = new Car('Ford', 'F-150', 'red')
    car.setColor('pink')
    car.save()
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27

    👍👍👍

    class Car {
      constructor(make, model, color) {
        this.make = make
        this.model = model
        this.color = color
      }
    
      setMake(make) {
        this.make = make
        // NOTE: Returning this for chaining
        return this
      }
    
      setModel(model) {
        this.model = model
        // NOTE: Returning this for chaining
        return this
      }
    
      setColor(color) {
        this.color = color
        // NOTE: Returning this for chaining
        return this
      }
    
      save() {
        console.log(this.make, this.model, this.color)
        // NOTE: Returning this for chaining
        return this
      }
    }
    
    const car = new Car('Ford', 'F-150', 'red').setColor('pink').save()
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33

    # 解构赋值简化变量赋值

    🙅‍♂️🙅‍♂️🙅‍♂️

    const obj = {
      name: 'bili',
      age: 22,
      gender: 'male'
    }
    
    const name = obj.name
    const age = obj.age
    const gender = obj.gender
    console.log(name, age, gender) // bili 22 male
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    👍👍👍

    const obj = {
      name: 'bili',
      age: 22,
      gender: 'male',
      skill: {
        work: 'code',
        hobby: 'sing'
      }
    }
    
    const { name, age, gender } = obj
    console.log(name, age, gender) // bili 22 male
    
    // rename
    const { name: myname } = obj
    console.log(myname) // bili
    
    // nest
    const {
      doing: { work }
    } = obj
    console.log(work) // code
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

    赋值解构数组

    🙅‍♂️🙅‍♂️🙅‍♂️

    const arr = [1, 2, 3]
    
    const a = arr[0]
    const b = arr[1]
    const c = arr[2]
    console.log(a, b, c) // 1 2 3
    
    1
    2
    3
    4
    5
    6

    👍👍👍

    const arr = [1, 2, 3]
    
    const [a, b, c] = arr
    console.log(a, b, c) // 1 2 3
    
    // set default
    const [a, b, c, d = 5] = arr
    console.log(a, b, c, d) // 1 2 3 5
    
    1
    2
    3
    4
    5
    6
    7
    8

    # Object.values() 获取对象 value 值数组

    比如做 leaflet 地图应用的时候 leaflet 的点位坐标为 {lat: 50, lng: 30}

    后端需要的格式是[50,30]

    🙅‍♂️🙅‍♂️🙅‍♂️

    const latLng = { lat: 50, lng: 30 }
    
    const latLngArr = []
    
    latLangArr.push(latLng[0])
    latLangArr.push(latLng[1])
    
    console.log(arr) // [ 50, 30]
    
    1
    2
    3
    4
    5
    6
    7
    8

    👍👍👍

    const latLng = { lat: 50, lng: 30 }
    
    const latLngArr = Object.values(latLng)
    
    console.log(arr) // [ 50, 30]
    
    1
    2
    3
    4
    5
    #JavaScript
    上次更新: 2023/04/05, 09:41:10
    前端图片处理
    BEM:class命名规范

    ← 前端图片处理 BEM:class命名规范→

    最近更新
    01
    JavaScript-test
    07-20
    02
    二维码的原理
    07-20
    03
    利用ChatGPT优化代码
    07-20
    更多文章>
    Theme by Vdoing | Copyright © 2021-2023 XingYun | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式