题目1

1
2
3
4
5
6
7
8
9
10
下列window方法中,可以显示对话框的一项是()

A: confirm()

B: alert()

C: prompt()

D: open()

  • 答案
    • C
  • 解析
    • A: 弹出一个判断对话框(有确认,取消按钮和提示文本),返回值为用户所按下的,为返回true,为返回false
    • B: 弹出一个对话框
    • C: 弹出一个用户输入对话框,返回值为用户输入的值,没有输入则返回值为null
    • D: 打开一个指定的窗口并指定打开方式

题目2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var s = Symbol('key'); ...①
console.log(s + '123'); ...②
var obj = {
[s]:function(){console.log(1);} ...③
}
var b = Reflect.ownKeys(obj); ...④
A: ①

B: ②

C: ③

D: ④

  • 答案

    • B
  • 解析

    • Symbol是ES6新增的基本数据类型之一(全部基本数据类型为undefined string symbol number null boolean) ‘记忆:usnb,你如此牛逼’

    • Symbol不可以发生类型转换(发生就报错)

    • Symbol的值不能与其他类型进行运算

    • 在对象内部使用Symbol 值作为属性名的时候,必须要将值放在方括号中

    • Symbol 值如果想要作为属性名,那就不能再用点运算符,因为点运算符后面跟的总是字符串

      1
      2
      3
      4
      5
      6
      7
      8
       let id = Symbol("id");
      let obj = {
      [id]:'symbol'
      };
      let array = Object.getOwnPropertySymbols(obj);
      console.log(array); //[Symbol(id)]
      console.log(obj[array[0]]); //'symbol'

      image-20220511091545286

题目3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var obj = {brand:'华为',price:1999};
Object.defineProperty(obj,'id',{value:1})
Object.defineProperty(obj,'price',{configurable:false})
console.log(Object.keys(obj).length); ...①
for (var k in obj){
console.log(obj[k]); ...②
}
obj.price = 999;
delete obj['price']
console.log(obj); ...③
A: ①式输出结果为3

B: ②式输出结果为华为 1999 1

C: ③式输出结果为{brand: '华为', price: 999, id: 1}

D: ③式输出结果为{brand: '华为', id: 1}

  • 答案

    • C
  • 解析

    • Object.defineProperty注意点

      • 通过其添加的属性值,如果没有设置该属性的描述符(比如writeable,configurable,和enumberable)那么默认为false
      • 可以使用**Object.getOwnPropertyDescriptor(obj,key)**来查看
    • 查看

      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
      var obj = {
      brand: '华为',
      price: 1999
      };
      Object.defineProperty(obj, 'id', {
      value: 1
      })
      Object.defineProperty(obj, 'price', {
      configurable: false
      })

      // 下面一行代码输出结果
      // 新添加的属性,未设置其他属性,则默认为false
      // configurable: false
      // enumerable: false
      // value: 1
      // writable: false
      console.log(Object.getOwnPropertyDescriptor(obj,'id'));

      //下面一行代码输出结果
      // 本来就有的属性,上方只是对值做了修改,并不是新增加的
      // configurable: false
      // enumerable: true
      // value: 1999
      // writable: true
      console.log(Object.getOwnPropertyDescriptor(obj,'price'));