JS 对象的遍历

 定义一个对象,对象的键包含所有数据类型

const SymbolKey = Symbol('a')
const dict = {
  [66]: 66,
  "string": 'string',
  [true]: true,
  [undefined]: undefined,
  [null]: null,
  [BigInt(123)]: BigInt(123),
  [function () { console.log("hello") }]: 'function value',
  [{}]: 'object value',
  [[]]: 'array value',
  [SymbolKey]: 'symbol value',
  __proto__: Object.prototype,
}

使用常规循环循环方法

for (let key in dict) {
  console.log("key:", key, " value:", dict[key])
}

Object.keys(dict).forEach(key => {
  console.log("key:", key, " value:", dict[key])
});

Object.entries(dict).forEach(([key, value]) => {
  console.log("key:", key, " value:", value);
});

Object.getOwnPropertyNames(dict).forEach(key => {
  console.log("key:", key, " value:", dict[key])
});

打印结果:

key: 66  value: 66

key: 123  value: 123n

key: string  value: string

key: true  value: true

key: undefined  value: symbol value

key: null  value: null

key: function () { console.log("hello") }  value: function value

key: [object Object]  value: object value

key:   value: array value

可以看出除了对象的原型对象和Symbol其他数据类型都可以打印出来

// 获取Symbol
const symbolKey = Object.getOwnPropertySymbols(dict)
console.log(symbolKey, dict[symbolKey[0]]);
// 获取 __proto__
const protoKey = Object.getPrototypeOf(dict)
console.log(protoKey, dict.__proto__);

 打印结果:

[ Symbol(a) ] symbol value

[Object: null prototype] {} [Object: null prototype] {}

 遍历对象全部属性:

// 遍历对象可枚举和不可枚举属性
const getObjectKeys = (obj) => {
  let keys = Object.keys(obj)
  const symbolKeys = Object.getOwnPropertySymbols(dict)
  keys.push(...symbolKeys)
  const protoKey = Object.getPrototypeOf(dict)
  keys.push(protoKey)
  return keys
}
console.log(getObjectKeys(dict));

打印结果:

[

  '66',

  '123',

  'string',

  'true',

  'undefined',

  'null',

  'function () { console.log("hello") }',

  '[object Object]',

  '',

  Symbol(a),

  [Object: null prototype] {}

]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值