JS获取对象属性名小结
最近面试遇到问如何获取对象全部属性名的方法,总结一下:
对象属性类型分类:
1.ESMAScript分类
数据类型 又分为可枚举和不可枚举类型
访问器类型
2.上下文分类
原型属性
实例属性
1.列举自身但不包括原型的可枚举属性名 Object.keys(obj)
// 遍历对象
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.demo = function() {};
let cj = new Person('cj', 25);
// 通过Object.defineProperty定义一个不可枚举属性
Object.defineProperty(cj, 'weight', {
enumerable:false
})
// enumerable = true
// console.log(Object.keys(cj)) // name age
// enumerable = false
// console.log(Object.keys(cj)) // name age weight
2.列举包括自身不可枚举但不包括原型的属性名 Object.getOwnPropertyNames(obj)
function Person(name, age) {
this.name = name;
this.age = age;
}
// 设置原型属性
Person.prototype.demo = function() {};
let cj = new Person('cj', 25);
// 通过Object.defineProperty定义一个不可枚举属性
Object.defineProperty(cj, 'weight', {
enumerable:false
})
// 获取属性名
console.log(Object.getOwnPropertyNames(cj)) // name age weight
3.获取自身和原型链上的可枚举属性 for in 返回的顺序可能与定义顺序不一致
function Person(name, age) {
this.name = name;
this.age = age;
}
// 设置原型属性
Person.prototype.demo = function() {};
Object.prototype.j = 1
let cj = new Person('cj', 25);
// 通过Object.defineProperty定义一个不可枚举属性
Object.defineProperty(cj, 'weight', {
enumerable:false
})
let props = []
for(prop in cj){
props.push(prop)
}
console.log(props) //name age weight j
4.获取自身Symbol属性 Object.getOwnPropertySymbols(obj)
let obj = {};
// 为对象本身添加Symbol属性名
let a = Symbol("a");
obj[a] = "localSymbol";
// 为对象原型添加Symbol属性名
let b = Symbol("b")
Object.prototype[b] = 111
let objectSymbols = Object.getOwnPropertySymbols(obj);
console.log(objectSymbols); //Symbol(a)
5.获取自身包括不可枚举和Symbol属性名,但不包括原型 Reflect.ownKeys(obj)
// 遍历对象
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.demo = function() {};
let s = Symbol('s')
let cj = new Person('cj', 25);
// 通过Object.defineProperty定义一个不可枚举属性
Object.defineProperty(cj, 'weight', {
enumerable: false
})
cj[s] = 1
let a = Symbol('a')
Object.prototype[a] = 1
console.log(Object.getOwnPropertyNames(cj)) //name age weight
console.log(Reflect.ownKeys(cj)) //name age weight Symbol(s)
JS获取对象属性名小结的更多相关文章
- js 获取对象属性个数
js 获取对象属性个数 方法一: var attributeCount = function(obj) { var count = 0; for(var i in obj) { if(obj.hasO ...
- js获取对象属性的两种方法,object.属性名,[‘属性名’ ]
1.通过点的方式 2.通过括号的方式 例: <input type="text" value="hello" id="text"/&g ...
- JS获取对象“属性和方法”的方法
平时在写的代码过程中,经常会遇到对对象Object的数据处理.而在对对象的数据处理中,操作最频繁的是“数据引用”.“值的修改”.“获取关键字(属性)”.平时最烦的也是“获取关键字”,经常忘记怎么去获取 ...
- JS获取对象“属性”的方法
var testObj= new Object(); testObj.name = "shangguan"; testObj.age= ; testObj.action = fun ...
- js 更改对象属性名
来自:https://segmentfault.com/q/1010000011923504 侵删 [ { "Id":"3972679ef2c04151972b376dd ...
- js 获取 对象 属性名称(转载)
来源:https://www.cnblogs.com/YuyuanNo1/p/9257634.html dataObj = {name : su,age : 26,height : 18cm }; f ...
- JS中isPrototypeOf 和hasOwnProperty 的区别 ------- js使用in和hasOwnProperty获取对象属性的区别
JS中isPrototypeOf 和hasOwnProperty 的区别 1.isPrototypeOf isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的 ...
- js获取对象的属性个数
for (var i = 0; i < dt.length; i++) { if (Object.keys(dt[i]).length <= 1) { dt.splice(i, 1); i ...
- JS 对象属性名排序
问题,对象属性名排序,如: var data = { A:[], D:[], B:{} } 调整为=> var data = { A:[], B:[], D:{} } 方法一: for,in,把 ...
随机推荐
- thinkphp区间查询、统计查询、SQL直接查询
区间查询 $data['id']=array(array('gt',4),array('lt',10));//默认关系是(and)并且的关系 //SELECT * FROM `tp_user` WHE ...
- ROS源更改
ROS源更改 配置你的电脑使其能够安装来自 packages.ros.org 的软件,使用国内或者新加坡的镜像源,这样能够大大提高安装下载速度 sudo sh -c '. /etc/lsb-relea ...
- 一个 Github 上使用 HttpClient 的 Sample
地址:https://github.com/MikeWasson/HttpClientSample 截图: 直接贴代码了: 服务端: [RoutePrefix("api/products&q ...
- WPF DataGrid 使用CellTemplateSelector 时SelectTemplate方法Item参数为NULL
首先说明 在SelectTemplate中并Item参数并不是真的一直为Null.而是先执行空参数,之后再会执行有参数的. 至于原因 我也不知道... 具体验证过程是 也就说 做好非空检测即可
- C# 删除文件到回收站
首先添加Microsoft.VisualBasic引用 程序中引用 Microsoft.VisualBasic.FileIO 来进行处理 Console.WriteLine("删除文件到回收 ...
- 【题解】C2Crni - Crni [COCI2010] [SP7884]
[题解]C2Crni - Crni [COCI2010] [SP7884] 传送门:\(\text{C2Crni - Crni}\) \(\text{[COCI2010]}\) \(\text{[SP ...
- 使用VMware 15 安装虚拟机和使用CentOS 8
前言: 最近在学习Linux和.Net Core,学习一些跨平台的知识.首先我用的虚拟机软件是VMware-15.1.0,Linux系统是CentOS-8-x86_64-1905-dvd1. 一.安装 ...
- Asp.Net Core采用MailKit部署到Linux Docker连接邮件服务器报错
前段时间看文章了解到发邮件的SmtpClient已经过时了,微软官方推荐大家用其他解决方案,例如MailKit. https://docs.microsoft.com/zh-cn/dotnet/api ...
- VirtualBox安装Ubutu出错
今天打算装个虚拟机玩玩,这次没有选择VM.感觉那东西各种破解有点麻烦而且体积也不小呀,所以,这次我选择了稍微点的的VirtualBox. 一路安装虚拟机没有问题,安装完后新建虚拟机都正常,可在启动虚拟 ...
- 英语chiltonite葡萄石chiltonite单词
葡萄石Chiltonite 1.葡萄石能够促进血液循环,具有美容养颜的功效,非常适合女性佩戴,可以增加个人魅力,还能加强事业财运,凝聚财富气场. 2.绿色光对应人体心轮,对心脏,肺脏有效用,内涵的磁石 ...