JavaScript技巧小结(实战篇)

1.浏览器兼容问题。

在我们需要用原生js添加属性的场景比如js动画中,如果不做特殊处理,那么操作一个属性(如transfrom)时往往要写非常冗长的兼容代码,而且代码大量重复,如果使用webpack的postcss-loader,那也只能处理css,不能兼容js。这就到了考验原生js功底的时候了。那么如何让兼容的js代码写的更加优雅呢?

//第一步,识别浏览器内核的类型
let elementStyle = document.createElement('div').style
let vendor = (() => {
  let transformNames = {
    webkit: 'webkitTransform',//webkit内核(safari和chrome)
    Moz: 'MozTransform',//Firefox浏览器内核
    O: 'OTransform',//Opera浏览器内核
    ms: 'msTransform',//IE内核(即Trident)
    standard: 'transform'//标准形式
  }
  for (let key in transformNames) {
    if (elementStyle[transformNames[key]] !== undefined) {
      return key
    }
  }
  return false
})()
//第二步 添加属性
export function prefixStyle(style) {
  if (vendor === false) {
    return false
  }
  if (vendor === 'standard') {
    return style
  }
  return vendor + style.charAt(0).toUpperCase() + style.substr(1)//样式属性在js中写成驼峰形式,和css有区别
}

代码已经秀出来了,导入调用即可,十分方便。

2.如何获得一个随机排序的的数组

在平常的业务中常常会有随机排序的这种需求。不妨也封装一下。

function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1) + min)//注意加1,不然取不到max
}

export function shuffle(arr) {
  let _arr = arr.slice()//深拷贝,为了不影响原来的数组
  for (let i = 0; i < _arr.length; i++) {
    let j = getRandomInt(0, i)
    let t = _arr[i]
    _arr[i] = _arr[j]
    _arr[j] = t
  }
  return _arr
}

这样就可以生成一个“乱七八槽”的数组啦。

3.队列问题

这个问题可以说相当常见了,我接触过的有“歌单以及歌曲播放历史”,“添加购物车”等等业务都涉及将新元素插入队列数据结构的使用。虽然不难,但是每次自己写还是稍显繁琐。

几点原则:1.如果新加的值就在队首,直接停止操作;

                  2.如果已经存在,删除已经存在的值,将新值插入队首;

                  3.如果队满,删队尾,插入新值到队首。

function insertArray(arr, val, compare, maxLen) {
  //arr为原始数组,val为带插入的值,compare为比较函数,maxLen为队列最大长度
  const index = arr.findIndex(compare)//找已经存在的值,不存在返回-1
  if (index === 0) {//是队首直接停止
    return
  }
  if (index > 0) {
    arr.splice(index, 1)//删除重值
  }
  if (maxLen && arr.length > maxLen) {
    arr.pop()//删除队尾
  }
  arr.unshift(val)//插入到队首

}

PS:个人认为以上代码算是非常简洁了,JavaScript不愧是世界上。。。(你懂的)

今天的干货就分享到这里,如果你觉得有用的话,请打上标签存在你的代码库里面,方便以后随时想起来调用,省时省心。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值