JavaScript对象提取id、name及特殊语法解析技术求助
问题解答
嘿,我来帮你理清楚这个问题~
一、先搞懂'410467873518256138' => Emoji { ... }到底是什么
你看到的这个写法不是标准的JS对象定义语法,而是浏览器或者Node.js控制台为了直观展示对象结构,用的一种“键-值映射”的显示格式:
- 左边的
'410467873518256138'是外层对象的属性键(字符串类型) - 右边的
Emoji { ... }是这个键对应的值,是一个Emoji类的实例对象 - 控制台用
=>来表示“这个键对应这个值”,而我们平时写代码时用的:才是标准的对象键值对定义语法。举个实际代码的例子,你看到的控制台输出对应的代码大概是这样的:
class Emoji { constructor(id, name) { this.id = id; this.name = name; } } // 这是你实际定义的对象 const myObj = { '410467873518256138': new Emoji('410467873518256138', 'element1') };
当你在控制台打印myObj时,就会看到类似{ '410467873518256138' => Emoji { id: '410467873518256138', name: 'element1' } }的输出,本质还是普通对象,只是显示方式不同而已。
二、怎么提取你要的id和name?
你用object.id拿不到内容,是因为id不是外层对象的直接属性——它藏在Emoji实例里面呢!你得先拿到这个Emoji实例,再访问它的属性:
方法1:已知键的情况下直接取
如果你已经知道这个属性键是'410467873518256138',用方括号语法就能拿到对应的实例:
// 假设你的对象叫myObj const emojiItem = myObj['410467873518256138']; const targetId = emojiItem.id; // 得到你要的'410467873518256138' const targetName = emojiItem.name; // 得到'element1'
这里必须用方括号[],不能用点语法,因为这个键是长数字字符串,不符合JS标识符的规则(点语法要求属性名是合法标识符,比如不能有这么长的纯数字字符串)。
方法2:不知道键的话就遍历对象
如果对象里有多个类似的Emoji实例,或者你不确定具体的键,可以遍历对象的所有属性:
// 方式1:遍历所有键 for (const key of Object.keys(myObj)) { const emoji = myObj[key]; console.log('id:', emoji.id); console.log('name:', emoji.name); } // 方式2:直接拿所有值,更简洁 Object.values(myObj).forEach(emoji => { console.log('id:', emoji.id); console.log('name:', emoji.name); });
三、为啥object.id没用?
因为object.id等价于object['id'],它会去外层对象里找键为'id'的属性,但你的外层对象根本没有这个键——它的键是那个长数字字符串'410467873518256138',所以自然返回undefined,也就没输出啦。
内容的提问来源于stack exchange,提问作者user7195739
相关产品推荐
相关产品推荐

