题目一
题目描述:
关于 Object.difineProperty 描述正确的是?(多选)
- A. Object.defineProperty() 方法会直接在一个对象上定义一个新的属性,或者修改一个对象的现有属性,并返回这个对象。
- B.一旦使用 Object.defineProperty 给对象添加属性,如果不设置属性的特性,那么 configurable、enumerable、writable 这些值都是默认的 false。
- C.除了可以给新定义的属性设置特性,也可以给已有的属性设置特性。
- D.在 ie8 下不能在 DOM 对象上使用,可以在原生的对象上使用 Object.defineProperty()。
- E.当使用了 getter 或 setter 方法,可以使用 writable 和 value 这两个属性。
答案:
A B C
解析:
- D : 在 ie8 下只能在 DOM 对象上使用,尝试在原生对象上使用 Object.defineProperty() 会报错。
- E : 当使用了getter 或 setter 方法,不允许使用 writable 和 value 这两个属性。
题目二
题目描述:写出下面代码的执行结果,并解释为什么
function user(obj){
obj.name = 'aaa';
obj = new Object();
obj.name = 'bbb';
}
let person = new Object();
user(person);
console.log(person.name);
答案:
'aaa'
解析:
- 对象作为参数,传递进去的是这个对象的地址,obj.name 是给 person 这个对象赋值,obj = new Object() ,把 obj 指向另外一个对象,obj.name 现在是给这个新对象赋值,不影响 person 这个变量指向的对象;两个 obj 指向的对象的引用地址不同
- ECMAScript 中所有的函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另外一个变量一样。
- 不过需要注意的是,基本类型的传递如同基本类型变量的复制一样,传递方式是按值传递,这意味着函数体内修改参数的值,不会影响到函数外部,。
- 而引用类型的值传递,如同引用类型变量的复制一样,传递方式是按引用传递,也就是传入函数的是原始值的地址,因此在函数内部修改参数,将会影响到原始值