分享几个涉及原型的知识点

95 阅读1分钟

操作符

delete

  • 不会删除原型链上找到的属性
  • 将属性从一个对象上删除的唯一方法(即为 empty),设置 undefined 或 null 只能修改属性的值,无法真正意义上删除

in

  • 检查包含在引用对象中的属性
  • 检查对象通过原型链继承的属性
  • 使用for(const key in object)会一同遍历对象所继承对象上的属性,故有时需要在循环内使用简单的if语句做判断

instanceof

  • 判断前面对象是否后面(对象)的实例

对象属性

秘密链接

  • 所有对象都有一个属性,即秘密链接(也称_proto_)至创建实例的构造函数,可以通过它获取构造函数,特别是构造函数的prototype属性

验证对象属性是否来自原型链

  • 使用hasOwnPrototype()方法验证一个属性来自对象本地属性或原型链

typeof(new String())返回值为'object'

  • 当时使用来自String()Number()Boolean()构造函数的实例与new关键字一起使用时,会生成一个实际的复杂对象,出现与typeof操作符相关的潜在问题

typeof(null)返回值为'object'

  • 验证null值时总使用===,因为==无法区分nullundefined
  • JS 使用undefined表示丢失,使用null表示你可以决定什么时候得到期望值,但不可用(如果指定一个属性或变量不可用,应该使用 null)

类型判断

// 普通对象
let data = {}
let result = Object.prototype.toString.call(data);
console.log(result)  // [object Object]

// 数组
data = []
result = Object.prototype.toString.call(data);
console.log(result)  // [object Function]

// 字符串
data = ''
result = Object.prototype.toString.call(data);
console.log(result)  // [object String]

以此类推......