20200219
Plan
半小时:你不知道的 js
Notes
- 属性描述符可以通过
Object.getOwnPropertyDescriptor来获取 configurable:false禁止使用 definedProperty 再次修改属性描述符。而且不能使用 delete 来删除某个 obj 上的属性。configurable:false可以把writable这个描述符的值由true改为false,但不能由false改为true。
var obj = {
a: Symbol("a")
};
Object.defineProperty(obj, "b", {
value: 24,
writable: true,
configurable: false
});
Object.defineProperty(obj, "b", {
writable: false // 不报错
});
Object.defineProperty(obj, "b", {
writable: true // Error
});
delete obj.b; // 无效
- 如果让我实现
const关键字
Object.defindeProperty(window || global, "obj", {
writable: false,
configurable: false
// ...
});
Object.seal可以修改属性值,不能添加新属 删除已有属性和配置已有属性Object.freeze在Object.seal的基础上,不可以修改属性值in和Object.hasOwnProperty的区别
var obj = { a: 2 };
var obj1 = Object.create(obj);
console.log(obj.hasOwnProperty("a")); // true
console.log(obj1.hasOwnProperty("a")); // false
console.log("a" in obj); // true
console.log("a" in obj1); // true 会去原型链上查找
- 给 object 实现一个 iterator -- demo
transferToIterator(iteratorObj); // 现在 iteratorObj 可以使用 for of 循环了
## More