操作符
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值时总使用===,因为==无法区分null和undefined
- JS 使用
undefined表示丢失,使用null表示你可以决定什么时候得到期望值,但不可用(如果指定一个属性或变量不可用,应该使用 null)
类型判断
let data = {}
let result = Object.prototype.toString.call(data);
console.log(result)
data = []
result = Object.prototype.toString.call(data);
console.log(result)
data = ''
result = Object.prototype.toString.call(data);
console.log(result)
以此类推......