20200219

@xiaojingzhao

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.freezeObject.seal的基础上,不可以修改属性值
  • inObject.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