var p = "p1": "value1", "p2": "value2", "p3": "value3"}; . A' S" t- |0 r
现在我想遍历一切p元素(p1,p2,p3…)并获得它们的键和值。我怎样才能做到这一点?$ [' a. x& t& y9 ^- V2 H' s# |
如有必要,我可以修改 JavaScript 对象。我的最终目标是遍历一些键值对,如果可能的话,我想避免使用eval.; o/ R( I' i) E
3 u- N- o6 B: ]- U. q解决方案: 6 o0 M* i1 M6 N! ^0 u
您可以使用for-in其他人所示的循环。但是,你必须确保你得到的密钥是物体的实际属性,而不是原型。% z T# J* M' B; O! h; }/ q 这是片段:, I/ E2 P. `& {/ |1 g
var p = "p1": "value1", "p2": "value2", "p3": "value3"};for (var key in p) if (p.hasOwnProperty(key)) console.log(key " -> " p[key]); }}" `0 F. o+ `; B
使用 Object.keys() 替代方案:8 x3 j/ J1 l+ y3 X" S
var p = 0: "value1", "b": "value2", key: "value3"};for (var key of Object.keys(p)) console.log(key " -> " p[key])}- g0 s8 \6 J7 E9 W6 A4 P1 V# y
Run code snippet. i, d* r. e" A! f' m4 e$ m8 _& x7 ?
Expand snippet0 k p4 V6 u5 g$ ?$ F: m, s) C& X; g
注意使用for-of而不是for-in,如果不使用,它将返回未定义的命名属性,并且Object.keys()确保只使用对象本身的属性而不使用整个原型链属性: c3 G2 `% X6 [, J3 N+ Y$ o 使用新Object.entries()方法: ! S5 N0 o# `- c: B注意: Internet Explorer 本身不支持此方法。您可以考虑为旧版浏览器使用 Polyfill。 7 \( z. q l7 C' ~2 g2 g6 U2 Z
const p = "p1": "value1", "p2": "value2", "p3": "value3"};for (let [key,value] of Object.entries(p)) { console.log(`${key}: ${value}`);}. T% v# d# V+ t/ U" i4 h