JS获取对象属性API汇总枚举symbol

 更新时间:2022年10月21日 16:31:51   作者:十七喜欢前端  
这篇文章主要为大家介绍了JS获取对象属性API汇总可枚举性不可枚举性及symbol介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

可枚举性介绍

对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。

Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象。

代码示例:

let obj = {
    name: 'Tom',
    age: 20
}
console.log(Object.getOwnPropertyDescriptor(obj,'name'))
// {
//    configurable: true
//    enumerable: true
//    value: "Tom"
//    writable: true
// }

描述对象的enumerable属性,称为“可枚举性”,如果该属性为false,就表示某些操作会忽略当前属性。

目前,有四个操作会忽略enumerable为false的属性。

for...in循环:只遍历对象自身的和继承的可枚举的属性。

Object.keys():返回对象自身的所有可枚举的属性的键名。

JSON.stringify():只串行化对象自身的可枚举的属性。

Object.assign(): 忽略enumerable为false的属性,只拷贝对象自身的可枚举的属性。

获取对象属性API

1.for in

主要用于遍历对象的可枚举属性,包括自有属性、继承自原型的属性,代码示例:

var obj = {"name":"tom","sex":"male"};
Object.defineProperty(obj, "age", {value:"18", enumerable:false});
//增加不可枚举的属性age
Object.prototype.protoPer1 = function(){console.log("name is tom");};
//通过原型链增加属性,为一个函数
Object.prototype.protoPer2 = 2;
//通过原型链增加属性,为一个整型值2
for(var a in obj){
    console.log(a);
}
// name
//sex
//protoPer1
//protoPer2

2、Object.keys

此方法返回一个数组,元素均为对象自有可枚举的属性

Object.keys主要用于遍历对象自有的可枚举属性,不包括继承自原型的属性和不可枚举的属性。代码示例:

var obj = {"name":"tom","sex":"male"};
Object.defineProperty(obj, "age", {value:"18", enumerable:false});
//增加不可枚举的属性age
Object.prototype.protoPer1 = function(){console.log("name is tom");};
//通过原型链增加属性,为一个函数
Object.prototype.protoPer2 = 2;
//通过原型链增加属性,为一个整型值2
console.log(Object.keys(obj));
//["name", "sex"]

3、Object.getOwnPropertyNames

主要用于返回对象的自有属性包括可枚举和不可枚举的属性,不包括继承自原型的属性。代码示例:

var obj = {"name":"tom","sex":"male"};
Object.defineProperty(obj, "age", {value:"18", enumerable:false});
//增加不可枚举的属性age
Object.prototype.protoPer1 = function(){console.log("name is tom");};
//通过原型链增加属性,为一个函数
Object.prototype.protoPer2 = 2;
//通过原型链增加属性,为一个整型值2
console.log(Object.getOwnPropertyNames(obj));
//["name", "sex","age"]

4.Object.getOwnPropertySymbols()遍历不可枚举属性

Symbol不可枚举

Object.getOwnPropertySymbols()可以获取指定对象的所有Symbol属性名。代码实例:

var obj = {};
var a = Symbol('a');
var b = Symbol('b');
obj[a] = 'ikun';
obj[b] = 'cai';
var objectSymbols = Object.getOwnPropertySymbols(obj);
console.log(objectSymbols)
//[ Symbol(a), Symbol(b) ]

Reflect.ownKeys

Reflect.ownKeys方法可以返回自身所有类型的键名,不包括继承自原型的属性。代码示例:

let obj = {
  [Symbol('my_key')]:1,
  enum:2,
  nonEnum:3
};
let objectKeys =Reflect.ownKeys(obj)
console.log(objectKeys)
//[ 'enum', 'nonEnum', Symbol(my_key) ]

以上就是JS获取对象属性API汇总枚举symbol的详细内容,更多关于JS获取对象属性API的资料请关注脚本之家其它相关文章!

相关文章

  • javascript设计模式 封装和信息隐藏(上)

    javascript设计模式 封装和信息隐藏(上)

    今天博文关注的是javascript中的封装,文章内容来自《pro javascript design patterns》(有兴趣的朋友可以直接去下)和自己对这一问题的理解
    2012-07-07
  • 使用js获取图片原始尺寸

    使用js获取图片原始尺寸

    本文给大家推荐的是一个使用js获取图片的原始尺寸的例子,从本人项目中抠出来的,这里奉献给大家,有需要的直接拿走。
    2014-12-12
  • Raphael带文本标签可拖动的图形实现代码

    Raphael带文本标签可拖动的图形实现代码

    Javascript和Raphael顺便学习了一下,主要是为了实现一个可拖动的矩形同时矩形上还得显示标签,网上关于这方面的知识提的很是于是本人自不量力写了一下,感兴趣的你可不要错过了哈,希望可以帮助到你
    2013-02-02
  • JS+CSS实现的经典圆角下拉菜单效果代码

    JS+CSS实现的经典圆角下拉菜单效果代码

    这篇文章主要介绍了JS+CSS实现的经典圆角下拉菜单效果代码,可实现非常经典的圆角下拉菜单效果,涉及JavaScript动态操作页面元素css样式的相关技巧,需要的朋友可以参考下
    2015-10-10
  • JavaScript闭包和作用域链的定义实现

    JavaScript闭包和作用域链的定义实现

    这篇文章主要为大家介绍了JavaScript闭包和作用域链的定义与实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 网站繁简切换的JS遇到页面卡死的解决方法

    网站繁简切换的JS遇到页面卡死的解决方法

    最近开发了繁体版本的网站,在网上找了一段比较流行的繁简切换的JS实现了,不过后来却发现,有些页面会卡死,针对这个问题,下面有个不错的解决方法
    2014-03-03
  • Javascript排序算法之计数排序的实例

    Javascript排序算法之计数排序的实例

    计数排序是一种高效的线性排序,它通过计算一个集合中元素楚翔的次数来确定集合如何排列,计数排序不需要进行数据的比较,所有他的运行效率前面介绍的都高
    2014-04-04
  • JavaScript 中的运算符和表达式介绍

    JavaScript 中的运算符和表达式介绍

    这篇文章主要介绍了JavaScript 中的运算符和表达式介绍,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • JavaScript中return false的用法

    JavaScript中return false的用法

    这篇文章主要介绍了JavaScript中return false的用法,在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为,需要的朋友可以参考下
    2015-03-03
  • js转换对象为xml

    js转换对象为xml

    本文主要介绍了js转换对象为xml的方法。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02

最新评论