前端面试题总结

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

原文地址:https://www.cnblogs.com/zhoudawei/p/10633192.html