题目1

1
2
3
4
5
6
7
8
9
以下关于Histroy对象的属性或方法描述正确的是()(多选)
A: back回到浏览器载入历史URL地址列表的当前URL的前一个URL

B: go表示刷新当前页面

C: length保存历史URL地址列表的长度信息

D: forward转到浏览器载入历史URL地址列表的当前URL的下一个URL

  • 答案
    • A,C,D
  • 解析
    • A: back回到浏览器载入历史URL地址列表的当前URL的前一个URL
    • B: go() 加载history列表中的某个具体页面(可以自由跳转)。所以B的表述刷新当前页面是错误的。
      • history.go(2)向前移动两页
      • history.go(-2)向后移动两页
    • C: 具体可看MdnWebDocs
    • D: 在会话历史中向前移动一页。它与使用delta参数为1时调用 history.go(delta)的效果相同。

题目2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
以下哪些代码执行后i的值为10:(多选)
A:
let i =1 + {
valueOf() { return 9; }
};

B:
let i = 0;
new Array(10).forEach(() => {
i++;
});

C:
let i = parseInt('0xA');

D:
let i = 5;
function a(i) {
i *= 2;
}
a(i)

  • 答案

    • A,C
  • 解析

    • A: 如果在需要使用原始值的上下文中使用了对象,就会自动调用valueOf方法.这里重写了默认的valueOf 方法。所以相当于 let i = 1+9

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      // 基本数据类型的类型和引用数据类型的比较,这里会先将引用数据类型转换为数字在进行比较
      // 引用数据类型转化为基本数据类型过程如下
      // 前置知识
      //1.valueOf 返回对象的字符串、数值或布尔值表示。
      //2.toString 返回对象的字符串表示。
      //1. 先调用ValueOf方法,如果valueOf就已经将数据转化为了基本数据类型就不进行下一步转换了

      //2. 如果valueOf没有转化为字符串,那么就会调用toString方法进行再次转换
      let i =1 + {
      valueOf() { return 9; }
      };
      // 第一步: 调用valueOf
      //发现重写了valueOf,所以就返回9
      {
      valueOf() { return 9; }
      };
      // 第一步执行完成后相当于
      let i =1 + 9;
      // 所以 i = 10
    • B: new Array(10); 建立长度为10的数组,forEach方法按升序为数组中含有效值的每一项执行一次 callback函数,那些未初始化的项将被跳过

    • C: 在没有指定基数的情况下,如果字符串以”0x”或者”0X”开头, 则基数是16 (16进制)。相当于let i = parseInt(‘0xA’,16)

    • D: i是形参,属于局部变量,不影响全局变量i的值

题目3

1
2
3
4
5
6
7
8
按照CommonJS规范,在任何模块代码的作用域下内置了以下哪些变量?
A: module

B: context

C: require

D: exports
  • 答案

    • A,C,D
  • 解析

    • 如 Nodejs当中调用arguments.callee.toString()即可查看内置变量

题目5

1
2
3
4
5
6
7
8
9
10
11
var a =[1,4,5,2,9];
下面求a中最大值的代码正确的是
A: Math.max(a)

B: Array.max(a)

C: Math.max.call(null,a)

D: Math.max.apply(null,a)

E: 以上均不是
  • 答案

    • D
  • 解析

    • Math.max() 函数返回一组数中的最大值。(不支持数组)

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      console.log(Math.max(1, 3, 2));
      // expected output: 3

      console.log(Math.max(-1, -3, -2));
      // expected output: -1

      const array1 = [1, 3, 2];

      console.log(Math.max(...array1));
      // expected output: 3
    • apply,call都是使某一个方法成为一个对象的属性来调用,第一个参数如果是null或者undefined,则会变为window(非严格模式下)

      • 所以这里只能用apply,传入多个参数给Math.max 类似于Math.max(…a)
      • 不可以使用call 因为call不能将数组展开为多个参数

题目6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
已知数组arr = [2,20,3,12,9],现在要对数组进行遍历,只要数组存在大于10的元素,则输出true,否则输出false,则下列选项中,符合要求的是()
A:
var res = arr.filter((val1,val2)=>{

return val1 > 10;

})

console.log(res);

B:
var res = arr.some((val1,val2)=>{

return val1 > 10;
})
console.log(res);

C:
var res = arr.every((val1,val2)=>{

return val1 > 10;

})

console.log(res);

D:
var res = arr.map((val1,val2)=>{

return val1 > 10;
})
console.log(res);
  • 答案
  • 解析

题目7

1
2
3
4
5
+new Array(017)   这段代码输出为?()
A: 17
B: NaN
C: 15
D: Error
  • 答案

    • B
  • 解析

    • 首先来看 new Array(017) 数字0开头,代表8进制,所以转化八进制17为十进制为15,也就是返回一个空数组,长度为15

    • +作为一元运算符时,会将参数转换为数字返回

    • 这里相当于对于一个未赋值但是长度为15的数组进行number类型转化,其结果为NaN