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,把 ...
随机推荐
- useEffect传入第二个参数陷入死循环
最近新项目刚上手,就用了react的hooks,之前也看过hooks的不少文章,只是还没实战实战. 业务场景1:需要在页面一开始时得到一个接口的返回值,取调用另一个接口. 我的思路是,先设置这个接口的 ...
- 中文情感分析——snownlp类库 源码注释及使用
最近发现了snownlp这个库,这个类库是专门针对中文文本进行文本挖掘的. 主要功能: 中文分词(Character-Based Generative Model) 词性标注(TnT 3-gram 隐 ...
- MySQL使用现状分析与优化
前言 再紧张的裁员氛围,也不该影响你学习的心态.不要本末倒置,技术永远不会落后,只要你还在学习的道路上,没有后退. 数据库架构 目前生产环境RDS是多区可用架构.数据库实例发生计划内或计划外的中断时, ...
- Mysql中的变量
Mysql中的变量众多(即运行的配置),如:事务相关的.连接相关的.查询优化类的等等. 变量的作用域: 1.临时作用域 session级别:即打开一个与mysql server会话的基础上的作用域,变 ...
- 上下文的哲学思考:上下文=环境 & 上下文=对象+行为+环境
事物的存在和运行所依赖的全部资源(能够看到和使用的一切)(环境). 上下文研究的是一个时段内,多个主体.对象在历次操作活动时,在空间的信息投射. 上下文是事物存在和生存活动的气泡,气泡消失,事物消失. ...
- table布局 常见问题总结
table实用属性: 属性 值 作用 描述 table-layout auto 自动计算列宽 对table和td.th指定的宽度无效 浏览器会计算所有单元格的内容宽度才能得出一列宽度 (默认值) fi ...
- StackExchange.Redis 封装
博主最近开始玩Redis啊~~ 看了很多Redis的文章,感觉有点云里雾里的,之前看到是ServiceStack.Redis,看了一些大佬封装的Helper类,还是懵懵的QAQ 没办法啊只能硬着**上 ...
- Power BI连接Oracle的注意事项
开始 Power BI 连接Oracle需要安装对应位数的ODAC,这个过程中有几个点要注意. ODAC 12c.x 版本(32.64),在安装时要将GAC的勾搭上.否则打开Power BI时会提示找 ...
- CentOS 7.0 使用yum 安装 Mariadb
第一步: 使用命令查看是否已经安装: mysql -u root -p 返回 Enter password: 时表示已经安装成功的,需要卸载安装. 第二步: 使用yum直接安装mariadb,注意带 ...
- 函数使用十一:BAPI_BANK_CREATE
FI01创建银行主数据: BAPI:BAPI_BANK_CREATE *&----------------------------------------------------------- ...