系统函数

3/22/2022 running

# 1. ['1', '2', '3'].map(parseInt) 输出什么?

map

真正的答案是 [1, NaN, NaN]。

map 函数的第一个参数 callback。

arr.map(callback: (value: T, index: number, array: T[]) => U, thisArg?: any)

这个 callback 一共可以 接收三个参数:

  • 第一个参数代表当前被处理的元素
  • 第二个参数代表该 元素的索引
parseInt

parseInt是用来解析字符串的,使字符串成为指定基数的整数。

parseInt(string, radix)

接收两个参数:

  • 第一个表示被处理的值(字符串)

  • 第二个表示为解析时的基数。

  • parseInt('1', 0) // radix为0时,且 string 参数不以“0x”和“0”开头时,按照10为基数处理,这个时候返回1

  • parseInt('2', 1) // 基数为1(1进制),表示的数中最大值小于2,所以无法解析,返回 NaN

  • parseInt('3', 2) // 基数为2(2进制),表示的数中最大值小于3,所以无法解析,返回 NaN

# 2. for循环如何输出 0 - 9

for循环加异步,如何输出0-9

for (var i = 0; i< 10; i++){
  setTimeout(() => {
    console.log(i)
  }, 1000)
}
1
2
3
4
5
解法一:let
for (let i = 0; i< 10; i++){
  setTimeout(() => {
    console.log(i)
  }, 1000)
}
1
2
3
4
5
解法二:闭包
for (var i = 0; i< 10; i++){
  ((i) => {
    setTimeout(() => {
      console.log(i)
    }, 1000)
  })(i)
}
1
2
3
4
5
6
7

# 3. 下面代码中 a 在什么情况下会打印 1?

下面代码中 a 在什么情况下会打印 1?

var a = ?
if(a == 1 && a == 2 && a == 3){
  console.log(1)
}
1
2
3
4
查看解析
  1. 考察的点是,在和数字比较的时候进行类型转换的时候,会访问起valueOf和toString属性
  2. 如果和数字比较,两者都有的情况下,valueOf的优先级高于toString
// 方法一:toString
var a = {
  i: 1,
  toString() {
    return a.i++;
  }
}

// 方法二:valueOf
var a = {
  i: 1,
  valueOf() {
    return a.i++;
  }
}

// 注意:valueOf和toString都存在的时候,比较数字valueOf优先级高

// 方法三:数组+toString
let a = [1,2,3]
a.toString = a.shift
if( a == 1 && a == 2 && a == 3 ) { console.log(1)}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 4. 数组用sort原生函数输出什么?

[3, 15, 8, 29, 102, 22].sort()
1
查看答案
[3, 15, 8, 29, 102, 22].sort()  // [102, 15, 22, 29, 3, 8]
[3, 15, 8, 29, 102, 22].sort((a,b) => b - a) // [102, 29, 22, 15, 8, 3]
1
2

根据 MDN 上对 Array.sort()的解释,默认的排序方法会将数组元素转换为字符串,然后比较字符串中字符的 UTF-16 编码顺序来进行排序。 所以'102' 会 排在 '15' 前面。

# 5. 下面的代码输出什么?

var obj = {
    '2': 3,
    '3': 4,
    'length': 2,
    'splice': Array.prototype.splice,
    'push': Array.prototype.push
}
obj.push(1)
obj.push(2)
console.log(obj)
1
2
3
4
5
6
7
8
9
10
查看答案

结果是length为4的伪数组(ArrayLike)

// Object(4) [empty × 2, 1, 2, splice: ƒ, push: ƒ]

更新时间: 2022-04-10 13:23