js如何获取object类型里的键值

本文介绍使用JavaScript动态获取对象属性值的两种方法:通过obj[key]及eval("obj."+key)方式,并提供了示例代码。

js如何获取object类型里的键值

作者: 字体:[增加 减小] 类型:转载 时间:2014-02-18 我要评论

这篇文章主要介绍了js获取object类型里键值的方法,需要的朋友可以参考下
id="iframeu2261530_0" src="http://pos.baidu.com/acom?sz=680x200&rdid=2261530&dc=2&di=u2261530&dri=0&dis=0&dai=2&ps=403x41&coa=at%3D3%26rsi0%3D680%26rsi1%3D200%26pat%3D6%26tn%3DbaiduCustNativeAD%26rss1%3D%2523FFFFFF%26conBW%3D1%26adp%3D1%26ptt%3D0%26titFF%3D%2525E5%2525BE%2525AE%2525E8%2525BD%2525AF%2525E9%25259B%252585%2525E9%2525BB%252591%26titFS%3D14%26rss2%3D%2523000000%26titSU%3D0%26ptbg%3D90%26piw%3D0%26pih%3D0%26ptp%3D0&dcb=BAIDU_UNION_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1456449154025&ti=js%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96object%E7%B1%BB%E5%9E%8B%E9%87%8C%E7%9A%84%E9%94%AE%E5%80%BC_javascript%E6%8A%80%E5%B7%A7_%E8%84%9A%E6%9C%AC%E4%B9%8B%E5%AE%B6&ari=1&dbv=2&drs=1&pcs=1072x545&pss=1072x409&cfv=0&cpl=4&chi=1&cce=true&cec=GBK&tlm=1454002478&ltu=http%3A%2F%2Fwww.jb51.net%2Farticle%2F46953.htm&ltr=http%3A%2F%2Fwangjingyi.iteye.com%2Fblog%2F2038264&ecd=1&psr=1366x768&par=1366x728&pis=-1x-1&ccd=24&cja=false&cmi=6&col=zh-CN&cdo=-1&tcn=1456449154&qn=db457840d3ba5aef&tt=1456449153937.174.319.321" width="680" height="200" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="display: block; border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">
最近遇到一个问题: 
复制代码代码如下:

var obj = {"name1":"张三","name2":"李四"}; 
var key = "name1"; 
var value = obj.key;//得到了"undefined" 
value = obj.name1;//得到了"张三" 

其实我是想动态给key赋值,然后得到key为多少所对就的值。但这种做法行不通,obj.key会去找obj下key为"key"所对应的值,结果当然是找不到喽。 
于是,我想到了js中遍历对象属性的方法: 
复制代码代码如下:

function printObject(obj){ 
//obj = {"cid":"C0","ctext":"区县"}; 
var temp = ""; 
for(var i in obj){//用javascript的for/in循环遍历对象的属性 
temp += i+":"+obj[i]+"\n"; 

alert(temp);//结果:cid:C0 \n ctext:区县 


这样,就可以清楚的知道js中一个对象的key和value分别是什么了。 
回到刚才的问题,怎么动态给key赋值,然后以obj.key的方式得到对应的value呢? 
其实以上printObject中有提示,那就是用obj[key]的方法,key可以是动态的,这样就解决了我上面提出的问题了。 
最后说一下,还有一个方法也可以,那就是:eval("obj."+key)。 

总结: 

js中想根据动态key得到某对象中相对应的value的方法有二: 
一、var key = "name1";var value = obj[key]; 
二、var key = "name1";var value = eval("obj."+key);
<think> 根据用户查询和提供的引用,用户想知道在JavaScript中如何依次获取对象(object)的所有key。引用中提到了几种方法,包括Object.keys()和Object.getOwnPropertyNames()。我将结合引用信息和JavaScript知识给出回答。 用户查询:"我想查找使用JavaScript依次获取object类型数据的key的方法" 引用分析: - 引用[1]和[2]都提到了Object.keys()方法,它返回对象自身可枚举属性组成的数组。 - 引用[3]提到了typeof操作符,用于判断数据类型,但用户问题不涉及类型判断。 - 引用[4]讨论了对象属性顺序问题,说明JavaScript对象属性顺序有特定规则(整数属性优先按数字顺序,字符串属性按创建顺序,Symbol属性最后)。 回答要点: 1. 主要方法:Object.keys()是最常用的方法,返回可枚举属性键的数组。 2. 其他方法:如果需要包括不可枚举属性,可以使用Object.getOwnPropertyNames()。 3. 注意属性顺序:根据ECMAScript规范,对象属性的顺序有特定规则(整数属性排序,其他按创建顺序)。 4. 示例代码:演示不同方法的使用。 注意事项: - 用户要求"依次获取",所以需要强调遍历顺序。 - 引用[4]提到Symbol属性不会被上述方法返回,需单独用Object.getOwnPropertySymbols()获取。 回答结构: - 先介绍最常用的Object.keys()方法。 - 再介绍其他方法(如包含不可枚举属性的情况)。 - 说明属性顺序规则。 - 提供完整示例。 - 最后生成相关问题。 </think> 以下是 JavaScript 中依次获取对象键值key)方法的详细说明,结合规范和实践要点: ### 1. **Object.keys()** [推荐方法] 返回对象**自身可枚举属性**的键名数组,可直接遍历: ```javascript const book = { title: 'JavaScript Advanced', author: 'John Doe', price: 29.99 }; // 获取键数组并遍历 const keys = Object.keys(book); keys.forEach(key => { console.log(`键: ${key}, : ${book[key]}`); }); ``` **输出**: ``` 键: title, : JavaScript Advanced 键: author, : John Doe 键: price, : 29.99 ``` ✅ **特点**: - 只返回**可枚举**属性(默认创建的属性均可枚举)[^1][^2] - 不包含原型链上的属性 - 属性顺序规则: - 数字键升序 → 字符串键按创建顺序 → Symbol键按创建顺序[^4] --- ### 2. **Object.getOwnPropertyNames()** 返回**所有自身属性**(包括不可枚举属性)的键名数组: ```javascript const obj = Object.create(null, { a: { value: 1, enumerable: true }, b: { value: 2, enumerable: false } // 不可枚举属性 }); console.log(Object.getOwnPropertyNames(obj)); // ["a", "b"] ``` ✅ **适用场景**: 需要访问不可枚举属性时(如数组的 `length` 属性) --- ### 3. **Reflect.ownKeys()** (ES6+) 返回**所有自身键**(包括Symbol键): ```javascript const obj = { [Symbol('id')]: 123, name: 'Test' }; console.log(Reflect.ownKeys(obj)); // ["name", Symbol(id)] ``` ✅ **特点**: - 包含 Symbol 类型键名[^4] - 不包含原型链属性 --- ### ✨ 关键注意事项 1. **属性顺序规则**(ECMAScript 规范): - 整数键(如 `"10"`)按数升序 - 字符串键按添加顺序 - Symbol 键按添加顺序 ```javascript const obj = { 2: 'two', 'b': 'bee', 1: 'one', 'a': 'ay' }; Object.keys(obj); // ['1', '2', 'b', 'a'] ``` 2. **与 `for...in` 的区别**: `for...in` 会遍历原型链属性,需额外过滤: ```javascript for (let key in obj) { if (obj.hasOwnProperty(key)) { console.log(key); // 仅自身属性 } } ``` 3. **Symbol 属性需特殊处理**: ```javascript const symbolKeys = Object.getOwnPropertySymbols(obj); ``` --- ### 方法对比表 | 方法 | 可枚举属性 | 不可枚举属性 | Symbol键 | 原型链属性 | |----------------------------|------------|--------------|----------|------------| | `Object.keys()` | ✅ | ❌ | ❌ | ❌ | | `Object.getOwnPropertyNames()`| ✅ | ✅ | ❌ | ❌ | | `Reflect.ownKeys()` | ✅ | ✅ | ✅ | ❌ | | `for...in` (+过滤) | ✅ | ❌ | ❌ | ✅ |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值