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

本文介绍了如何在JavaScript中通过动态键名获取对象属性值的方法,包括使用obj[key]及eval方法,并提供了一个示例来展示如何遍历对象的所有键值对。
最近遇到一个问题:
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(obj);  //结果:[object Object]
    //console.log(obj);  //使用firebug查看结果
    alert(temp);   //结果:cid:C0 \n ctext:区县
}
这样,就可以清楚的知道js中一个对象的key和value分别是什么了。

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

总结:
js中想根据动态key得到某对象中相对应的value的方法有二:
1、var key = "name1";var value = obj[key];
2、var key = "name1";var value = eval("obj."+key);


扩展阅读:jquery ajax 回调函数的值alert出来[object Object] 解决方法

<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、付费专栏及课程。

余额充值