最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 让代码更简短、更简洁、更易读的 js 小技巧

    正文概述 掘金(__远行__)   2021-01-25   427

    让代码更简短、更简洁、更易读的 js 小技巧

    一、模板字符串

    • 用反引号包裹字符串,并且能使用 ${ variable | expression } 来插入变量或者表达式
    • 能按指定格式输出,即不会忽略空格
    • 例子:
    const word = 'hello'
    const str = `
      EQEQEQEQR
      ${word}
      EQRRRRRRR
    `
    /*
    EQEQEQEQR
    hello
    EQRRRRRRR
    */
    

    二、块级作用域

    JavaScript是使用块级作用域的,这就是为什么频繁地使用匿名的立即执行函数表达式来实现整个 JavaScript 文件的封装。这么做是为了把所有的变量隔离在文件内从而避免变量冲突。 现在有了块级作用域和两个声明块级作用域变量的关键字 let 和 const

    • 例子:
    // 经典面试题
    for(var i = 1; i < 5; i++){
      setTimeout(() => {
        console.log(i);
      }, 1000)
    } 
    // 输出是 5 5 5 5 
    
    // 如果把 var 变为 let ,就能输出我们想要看到的结果
    for(let i = 1; i < 5; i++){
      setTimeout(() => {
        console.log(i);
      }, 1000)
    } 
    // 现在,每次循环都会创建一个全新的块级作用域把 i 限制在当前的循环中,可以理解为这样:
    // {let i = 1; setTimeout(() => { console.log(i) }, 1000)} 
    // {let i = 2; setTimeout(() => { console.log(i) }, 1000)} 
    // {let i = 3; setTimeout(() => { console.log(i) }, 1000)} 
    // {let i = 4; setTimeout(() => { console.log(i) }, 1000)} 
    

    var 和 let 的另外一个区别是 let 不会像 var 一样被变量提升:

    • 例子:
    { 
      console.log(a); // undefined
      console.log(b); // ReferenceError
      var a = 'car';
      let b = 5;
    }
    

    三、扩展运算符

    主要用途:

    • 将一个数组或者对象放到一个新的数组或者对象中
    let a = [3,4,5]
    let b = [1,2, ...a, 6]
    console.log(b) // [1,2,3,4,5,6]
    
    function foo(a,b,c){
      console.log(`a=${a}, b=${b}, c=${c}`)
    }
    let data = [5, 15, 2]
    foo(...data) // a=5, b=15, c=2
    
    • 将数组中的多个参数合并在一起

    四、参数默认值

    函数参数值可以给一个默认值。不传参或者未定义值都被初始化为默认值。但是需要注意的是,null 和 false 都会被强转为 0

    • 默认值的类型可以不仅仅是值类型,还可以是表达式或者函数

    五、解构

    解构是拆开等号左边的数组或者对象的过程。这个数组或者对象可以来自一个变量,一个函数,或者一个等式

    六、动态属性名称

    ES6 添加了使用动态分配的键创建或添加属性的功能

    let  city= 'sheffield_';
    let a = {
        [ city + 'population' ]: 350000
    };
    a[ city + 'county' ] = 'South Yorkshire';
    console.log(a); // {sheffield_population: 350000, sheffield_county: 'South Yorkshire' }
    

    七、箭头函数

    • 不要关键字 function

    八、for...of循环

    ES6 新添加了一种方式来迭代数组中的每个值,这个方式是与已经存在的 for...in 的通过索引的循环方式不同。

    let a = ['a', 'b', 'c', 'd' ];
    // ES6 
    for ( var val of a ) {
        console.log( val );
    } // "a" "b" "c" "d"
    // pre-ES6 
    for ( var idx in a ) {
        console.log( idx );
    }  // 0 1 2 3
    

    九、10句js单行代码

    1. 获取一个随机布尔值( true / false )
    const randomBoolean = () => Math.random() >= 0.5
    // 这个函数得到true和false的几率是50%、50%
    
    1. 检查日期是否为工作日
    const isWeekday = (date) => date.getDay() % 6 !== 0
    // 检查函数参数是工作日还是周末
    
    1. 反转字符串
    // 有几种不同的方法来反转一个字符串,以下代码时最简单的一种方式
    const reverse = str => str.split('').reverse().join('')
    
    1. 检查当前 Tab 页是否在前台
    const isBrowserTabInView = () => document.hidden
    // 通过使用 document.hidden 属性来检查当前标签页是否在前台中
    
    1. 检查数字是否为奇数
    const isEven = num => num % 2 === 0
    console.log(isEven(2)) // true
    console.log(isEven(3)) // false
    
    1. 从日期中获取时间
    const timeFromDate = date => date.toTimeString().slice(0, 8)
    
    1. 保留小数点(非四舍五入)
    // 使用 Math.pow() 方法,可以将一个数字截断到某个小数点
    const toKeepPoint = (num, fixed) => ~~(Math.pow(10, fixed) * num) / Math.pow(10, fixed)
    toKeepPoint(3.1415926, 1) // 3.1
    toKeepPoint(3.1415926, 2) // 3.14
    toKeepPoint(3.1415926, 3) // 3.141
    toKeepPoint(3.1415926, 4) // 3.1415
    
    1. 检查元素当前是否为聚焦状态
    // 使用document.activeElement属性检查一个元素当前是否处于聚焦状态
    const elementIsInFocus = (ele) => (ele === document.activeElement)
    
    1. 检查浏览器是否支持触摸事件
    const touchSupported = () => {
      ( 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)
    }
    // 支持触摸事件,返回true
    
    1. 检查当前用户是否为苹果设备
    // 使用 navigator.platform 来检查当前用户是否为苹果设备
    const isAppleDevice = /Mac | iPod | iPhone | iPad/.test(navigator.platform)
    

    起源地下载网 » 让代码更简短、更简洁、更易读的 js 小技巧

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元