资讯专栏INFORMATION COLUMN

属性的可枚举性与不可枚举性

Jason / 1004人阅读

摘要:判断可枚举属性与不可枚举属性方法方法返回一个布尔值,表示指定的自身属性是否可枚举。

我们到MDN上搜索属性的可枚举性和所有权

可枚举属性是指内部可枚举标志(enumerable)设置为true的属性,自然不可枚举属性即是enumerablefalse

我们看下JavaScript基本类型和基本类型包裹对象

基本类型是指非对象且无方法的数据。
JavaScript有6种基本类型:string,number,boolean,null,undefined,symbol
除了null和undefined外,所有基本类型值都有包裹这个基本类型值的等价对象:
String Boolean Number Symbol
JavaScript有7种不同类型的值

六种 原型 数据类型

Boolean

String

Number

null

undefined

Symbol

Object对象

还有一个概念就是字面量,有以下字面量

数组字面量(Array)

布尔字面量 (Boolean)

浮点数字面量 (Float)

整数 (Int)

对象字面量 (Object)

RegExp

字符串字面量 (String)

好了好了扯远了,为什么说这些呢,抛出问题,以上属性是否可枚举呢?

下面来看一个例子:

function Person() {
    this.name = "fyflying"
}
Person.prototype = {
    hobby: "coding"
}
var person = new Person()
Object.defineProperty(person, "sex", {
    value: "female"
})
for (var item in person) {
    console.log(item + ":" + person[item])
}
/**
name:fyflying
hobby:coding
**/
Object.keys(person)
// ["name"]
JSON.stringify(person)
//"{"name":"fyflying"}"

可以看到除了sex属性其他都遍历到了,而且使用for..inObject.keys还是有区别的,区别就在于使用for...in还会遍历出对象从原型链上继承来的可枚举属性

通过Object.defineProperty定义的属性,该标志值默认是false, 所以不可枚举,通过for..inObject.keys()都遍历不到。

判断可枚举属性与不可枚举属性方法
propertyIsEnumerable(): 方法返回一个布尔值,表示指定的自身属性是否可枚举。(不包括原型链继承的属性)

区别以下方法:

使用 for...in迭代,遍历出自身以及原型链上的可枚举的属性,通过hasOwnProperty进行筛选能遍历出自身可枚举属性
而使用Object.keys直接遍历出的自身可枚举属性组成的数组
使用getOwnPropertyNames可以访问自身可枚举属性与不可枚举属性

另外,还有大漠的文章参考,对于以上几个方法介绍的很详细。对象属性的枚举

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94740.html

相关文章

  • ECMAScript6(8):对象的扩展

    基本扩展 允许使用已有对象赋值定义对象字面量,并且只写变量名即可 var name = Bob; var getName = function(){console.log(this.name);}; var person = {name, getName}; //相当于 //var person = { //name: Bob, //getName: function(){console.log...

    pingan8787 评论0 收藏0
  • JS基础篇--JS中的可枚举不可枚举以及扩展

    摘要:在中,对象的属性分为可枚举和不可枚举之分,它们是由属性的值决定的。这是因为中内置的属性是不可枚举的,所以不能被访问到。此对象不可扩展且指定的属性名称不存在。返回值一个数组,其中包含对象的可枚举属性和方法的名称。 在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的。可枚举性决定了这个属性能否被for…in查找遍历到。 一、怎么判断属性...

    dreamans 评论0 收藏0
  • 【基础系列】javascript中的对象

    摘要:自定义对象是指由开发者在代码中所创建的对象。继承属性是指在对象原型链中的属性。与此同时,对象的属性还具有一些特性可写代表是否可以设置该对象所对应的该属性的值。我们可以利用来判断这个对象是否封闭,传入一个对象,返回布尔值。 这次我们好好聊一聊对象这个东西,本次说的不是array,也不是function,而是object 基础概念 对象是一种特殊的数据类型,这种数据类型还有其他的很多叫法...

    617035918 评论0 收藏0
  • JS学习之Object

    摘要:文中的多为构造函数原型对象属性为函数的专属属性,表示函数的原型对象。关于各种数据类型的属性的展示对象的构造器函数该属性指向创建该对象原型的构造函数。对对象的冻结状态的设置和判断,前者让冻结对象,后者判断对象是否被冻结。 前言 上篇文章介绍了JS的对象,本文将介绍Object这个基类,主要介绍其属性和方法(其实这些在MDN里都有^_^,点击这里可以直通MDN)。好了废话不多说了,直接开始...

    qujian 评论0 收藏0
  • ES6入门之对象的扩展

    摘要:循环遍历对象自身的和继承的可枚举属性不含属性。返回一个数组,包含对象自身的所有属性的键名。目前,只有对象方法的简写法可以让引擎确认,定义的是对象的方法。showImg(https://user-gold-cdn.xitu.io/2019/5/21/16ada8456223b0e1); 1. 属性的简洁表示法 在ES6中 允许直接写入变量和函数,作为对象的属性和方法,使得代码的书写更为简洁。...

    RiverLi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<