跳到主要内容

面试题

  1. URL 获取参数
const URL = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=%E8%A7%A3%E6%9E%90%E5%AD%97%E7%AC%A6%E4%B8%B2%2C%E4%BB%8Eurl%E4%B8%8A%E6%8F%90%E5%8F%96%E9%94%AE%E5%80%BC%E5%AF%B9%20js&oq=%25E8%25A7%25A3%25E6%259E%2590%25E5%25AD%2597%25E7%25AC%25A6%25E4%25B8%25B2%252C%25E4%25BB%258Eurl%25E4%25B8%258A%25E6%258F%2590%25E5%258F%2596%25E9%2594%25AE%25E5%2580%25BC%25E5%25AF%25B9&rsv_pq=8b21b61c00094e3d&rsv_t=b27d1lbdqRYuFhCd4nM7FR6zYNrz4HlmYc8ezFnZ3a0qw%2Ba1phgLasuuMpQ&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=5&rsv_sug2=0&rsv_btype=t&inputT=1323&rsv_sug4=2266'

function getParamByKey(url) {
const paramsStr = url.split('?') ? url.split('?')[1] : ''
const obj = {}
let list = paramsStr.split('&') || []
for(let i=0;i<list.length;i++) {
const [key,value] = list[i].split('=')
obj[key] = decodeURIComponent(value)
}
return function (key) {
return obj[key]
}
}

const getKV = getParamByKey(URL)
getKV('rsv_sug4')
  1. 0.1 + 0.2 为什么不等于 0.3

小数的二进制表示:

在 JavaScript 中,0.1 在 IEEE 754 标准双精度浮点数中的二进制表示并不是一个精确的小数。由于计算机以二进制进行运算,而 0.1(十进制)是一个无限循环小数(0.0001100110011...),在二进制中无法精确表示。

因此,0.1 在 IEEE 754 标准双精度浮点数中会被近似表示。具体来说,0.1 在双精度浮点数中的近似二进制表示是一个无限循环小数的近似值。

计算规则:

  • 一个数的小数部分,*2,然后取整数部分的结果,再用计算后的小数部分重复计算,直到小数部分为 0
// 0.1 二进制表示
0.1 * 2 = 0.2 // 0
0.2 * 2 = 0.4 // 0
0.4 * 2 = 0.8 // 0
0.8 * 2 = 1.6 // 1
0.6 * 2 = 1.2 // 1
// 循环开始
0.2 * 2 = 0.4 // 0
// 0.2 二进制表示
0.2 * 2 = 0.4 // 0(0: 取整数部分)
0.4 * 2 = 0.8 // 0 (0.4: 取小数部分)
0.8 * 2 = 1.6 // 1
0.6 * 2 = 1.2 // 1
// 循环开始
0.2 * 2 = 0.4 // 0
// ...