• 前端面试题总结


    一、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) : ''
    }

  • 相关阅读:
    【C++】获取环境变量
    浅谈ADO.NET和EntityFramework以及Nhibernate
    Entity Framework(EF)
    线程安全以及锁
    JWT认证
    ADO.NET
    jmeter请求https接口,需要设置证书
    git remote: HTTP Basic: Access denied
    2021~2022年度全国小语“十大青年名师”评选活动, 播放地址、下载地址
    20192420 任文朗 202120222 《网络与系统攻防技术》实验八实验报告
  • 原文地址:https://www.cnblogs.com/zhoudawei/p/10633192.html
Copyright © 2020-2023  润新知