今日刷题-Object.defineProperty和Object.getOwnPropertyDescriptor
题目1
1 | 下列window方法中,可以显示对话框的一项是() |
- 答案
- C
- 解析
- A: 弹出一个判断对话框(有确认,取消按钮和提示文本),返回值为用户所按下的,为
真
返回true,为假
返回false - B: 弹出一个对话框
- C: 弹出一个用户输入对话框,返回值为用户输入的值,没有输入则返回值为
null
- D: 打开一个指定的窗口并指定打开方式
- A: 弹出一个判断对话框(有确认,取消按钮和提示文本),返回值为用户所按下的,为
题目2
1 | var s = Symbol('key'); ...① |
答案
- B
解析
Symbol是ES6新增的基本数据类型之一(全部基本数据类型为undefined string symbol number null boolean) ‘记忆:usnb,你如此牛逼’
Symbol不可以发生类型转换(发生就报错)
Symbol的值不能与其他类型进行运算
在对象内部使用Symbol 值作为属性名的时候,必须要将值放在方括号中
Symbol 值如果想要作为属性名,那就不能再用点运算符,因为点运算符后面跟的总是字符串
1
2
3
4
5
6
7
8let id = Symbol("id");
let obj = {
[id]:'symbol'
};
let array = Object.getOwnPropertySymbols(obj);
console.log(array); //[Symbol(id)]
console.log(obj[array[0]]); //'symbol'
题目3
1 | var obj = {brand:'华为',price:1999}; |
答案
- 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
26var 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'));
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 梦洁小站-属于你我的小天地!
评论