js--for..in和in操作符

两种使用方式:
  1. for..in
    • 返回所有能够通过对象访问的、可枚举的属性,其中包括实例属性,也包括原型属性。
      • 通过obj.hasOwnProperty(xxx)可以判断某个属性是否是实例属性。
    • Object.keys()传入一个对象作为参数,可以返回仅存在于该对象上的所有可枚举属性的字符串数组,不包括原型对象上的属性。
    • Object.getOwnPropertyNames(),传入一个对象作为参数,可以返回所有存在于该实例对象上的属性名称,不论是否可枚举,但不包括原型对象上的属性。
      ES5中,将constructor和prototype的enumerable设置为false.。
  2. 单独使用
    • in操作符会在通过对象能够访问给定属性时返回true,无论该实例存在于实例中还是原型中。
    • 区别:obj.hasOwnProperty(),只有在属性存在于实例中时才返回true,如果只存在于原型对象中,实例中没有,则会返回false。
    • 结合in和obj.hasOwnProperty()可以找出只存在于原型对象上的属性:return !obj.hasOwnProperty( name ) && ( name in obj ); ,如果总体返回true,则obj.hasOwnProperty( name )返回也是true,则是实例上的属性,如果总体返回false,说明obj.hasOwnProperty( name )为false,如果此时name in obj为true,则可以确定这是只存在于原型对象上的属性。

你可能感兴趣的:(js--for..in和in操作符)