前端面试题总结
一、JavaScript中判断为整数的多种方式
方式一、使用取余运算符判断
function isInteger(obj) {
return obj%1 === 0}正确:
isInteger(4) // trueisInteger(4.8) // false错误:
isInteger('') // true
isInteger('4') // trueisInteger(true) // trueisInteger([]) // 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) // trueisInteger(4.8) // falseisInteger('') // falseisInteger('4') // falseisInteger(true) // falseisInteger([]) // false方式三、通过parseInt判断
function isInteger(obj) {
return parseInt(obj, 10) === obj}正确:
isInteger(4) // trueisInteger(4.8) // falseisInteger('') // falseisInteger('4') // falseisInteger(true) // falseisInteger([]) // false错误:
isInteger(10000000000000000000000) // false缺点:parseInt在解析整数之前强迫将第一个参数解析成字符串。
方式四、通过位运算判断
function isInteger(obj) {
return (obj | 0) === obj}正确:
isInteger(4) // trueisInteger(4.8) // falseisInteger('') // falseisInteger('4') // falseisInteger(true) // falseisInteger([]) // false错误:
isInteger(Math.pow(2, 32)) // 32位以上的数字返回false了缺点:位运算只能处理32位以内的数字,对于超过32位的无能为力。
方式五、ES6提供了Number.isInteger
Number.isInteger(4) // true
Number.isInteger(4.8) // false
Number.isInteger('') // falseNumber.isInteger('4') // falseNumber.isInteger(true) // falseNumber.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) : ''
}

浙公网安备 33010602011771号