zoukankan      html  css  js  c++  java
  • 前端面试题总结

    一、JavaScript中判断为整数的多种方式

    方式一、使用取余运算符判断

    function isInteger(obj) {

      return obj%1 === 0
    }
    正确:
    isInteger(4) // true
    isInteger(4.8) // false
    错误:
    isInteger(''// true
    isInteger('4'// true
    isInteger(true// true
    isInteger([]) // true
    缺点:对于空字符串、字符串类型数字、布尔true、空数组都返回了true
    改善:判断下对象是否是数字
    function isInteger(obj) {
        return typeof obj === 'number' && obj%1 === 0
    }

    方式二、【推荐】使用Math.round、Math.ceil、Math.floor判断

    原理:整数取整后还等于本身。利用这个特性来判断是否是整数,Math.floor示例,如下

    function isInteger(obj) {

      return Math.floor(obj) === obj
    }
    isInteger(4) // true
    isInteger(4.8) // false
    isInteger(''// false
    isInteger('4'// false
    isInteger(true// false
    isInteger([]) // false

    方式三、通过parseInt判断

    function isInteger(obj) {

      return parseInt(obj, 10) === obj
    }
    正确:
    isInteger(4) // true
    isInteger(4.8) // false
    isInteger(''// false
    isInteger('4'// false
    isInteger(true// false
    isInteger([]) // false
    错误:
    isInteger(10000000000000000000000) // false
    缺点:parseInt在解析整数之前强迫将第一个参数解析成字符串。

    方式四、通过位运算判断

    function isInteger(obj) {

        return (obj | 0) === obj
    }
    正确:
    isInteger(4) // true
    isInteger(4.8) // false
    isInteger(''// false
    isInteger('4'// false
    isInteger(true// false
    isInteger([]) // false
    错误:
    isInteger(Math.pow(2, 32)) // 32位以上的数字返回false了
    缺点:位运算只能处理32位以内的数字,对于超过32位的无能为力。

    方式五、ES6提供了Number.isInteger

    Number.isInteger(4) // true

    Number.isInteger(4.8) // false

    Number.isInteger(''// false
    Number.isInteger('4'// false
    Number.isInteger(true// false
    Number.isInteger([]) // false
     
    总结:对于ES5中,推荐使用 Math.floor(obj) === obj,ES6中推荐使用Number.isInteger方法。
     
    二、写一个json对象转地址栏参数的功能
    function qsStringify(object) {
      let keys = Object.keys(object)
      let string = ''
      keys.forEach(key => {
        string += `${key}=${object[key]}&`
      });
      return string.substring(0, string.length -1)
    }
     

    function param(data) {
      let url = ''
      for (var k in data) {
        let value = data[k] !== undefined ? data[k] : ''
        url += `&${k}=${encodeURIComponent(value)}`
      }
      return url ? url.substring(1) : ''
    }

  • 相关阅读:
    使用yum更新时不升级Linux内核的方法
    centos7 redmine安装过程(转载)
    CentOS7安装GitLab、汉化、邮箱配置及使用(转载)
    [bzoj2780][Spoj8093]Sevenk Love Oimaster_广义后缀自动机
    [bzoj2595][WC2008]游览计划/[bzoj5180][Baltic2016]Cities_斯坦纳树
    [bzoj4006][JLOI2015]管道连接_斯坦纳树_状压dp
    OI模板のpoke流[大型考试复习必备/kl]
    [bzoj2453]维护队列_带修改莫队
    [bzoj4519][Cqoi2016]不同的最小割_网络流_最小割_最小割树
    [bzoj3894]文理分科_网络流_最小割
  • 原文地址:https://www.cnblogs.com/zhoudawei/p/10633192.html
Copyright © 2011-2022 走看看