ES6 一共有 5 种方法可以遍历对象的属性。
(1)for...in
for...in 循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。
(2)Object.keys(obj) ie9
Object.keys 返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。
(3)Object.getOwnPropertyNames(obj) ie9
Object.getOwnPropertyNames 返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。
(4)Object.getOwnPropertySymbols(obj)
Object.getOwnPropertySymbols 返回一个数组,包含对象自身的所有 Symbol 属性的键名。
(5)Reflect.ownKeys(obj)
Reflect.ownKeys 返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。
以上的 5 种方法遍历对象的键名,都遵守同样的属性遍历的次序规则。
其中兼容性最好的是for... in来进行遍历,因为我们通常只需要遍历对象自身拥有的属性 所以使用 Object.prototype.hasOwnProperty() 兼容到ie5.5 方法来排除继承的属性
注意:即使属性的值是 null 或 undefined ,只要属性存在, hasOwnProperty 依旧会返回 true 。
如果不在意兼容性问题,用keys方法,搭配for... of来遍历也不错,、
for...of是es6引入的用于遍历可迭代对象的语法,相当于python里的for in。
js的for...in别扭的地方在于,遍历数组和对象都是返回的key值,遍历数组是下标值。for...of遍历数组会返回每一个值,跟foreach类似的效果,但是对于对象,只支持实现了迭代器的对象。
上篇文章 JS 对象(Object)的深入解析—私有属性 介绍了对象的私有属性,这篇文章主要讲下对象的原型链属性,这些属性是每个对象都可以访问调用的,好了,废话不多说,开始进入主题。
该原型属性指向Object对象本身
该方法可以用来判断是否是对象的私有属性,如果是则返回true,否则返回false。for...in 遍历私有和原型属性,通过hasOwnProperty和in方法可以判断某个属性是否是原型属性
prototypeObj.isPrototypeOf(object)
检测prototypeObj这个对象是是否在object对象的原型链上。
obj.propertyIsEnumerable(prop)
测试对象的某个属性是否可枚举,返回Boolean。
注意
每个对象都有一个 propertyIsEnumerable 方法。此方法可以确定对象中指定的属性是否可以被 for...in 循环枚举,但是通过 的属性除外。如果对象没有指定的属性,则此方法返回 false 。
比较
数组转化相同
时间转化不同
数字转化不同
valueOf()方法返回对象的原始值。
注意
JavaScript调用valueOf方法将对象转换为原始值。你很少需要自己调用valueOf方法;当遇到要预期的原始值的对象时,JavaScript会自动调用它。
valueOf()重写
js中对象一般由属性和方法组成。
js对象的分类:
1、内置对象:
由ES标准中定义的对象,比如:Object、Math、Date、String、Array、Number、Boolean、Function等。
2、宿主对象:
由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象。比如 BOM DOM。比如console、document。
3、自定义对象:
自己创建的对象,通过 new 关键字创建出来的对象实例。
扩展资料:
js原型对象的作用:
1、在js的所有内置对象中都存在prototype原型属性。
2、在js的内置对象的原型属性中,追加方法,那么该方法会自动追加到内置对象中。
3、js的原型属性最终的目的是给内置对象追加方法。
使用方式:
function Array(){
//创建一个原型对象
this.prototype(原型属性) = new Prototype()
//自动追加
this.seach = function(target){
...
}
}
function Prototype(){
this.seach = function(taget){
...
}