一般情況用 Object.keys 就可以滿足到返回自定義 property names,但有時你想得到所有 inherited 嘅 property 比如 Array.prototype.length 又或者 object 本身有 define 咗 non-enumerable property,Object.keys 就滿足唔到。
const 公務員加薪 = { 加幅: 0.025 };
Object.keys(公務員加薪); // ['加幅']
Object.getOwnPropertyNames(公務員加薪); // ['加幅']
// Array
const 公務員團體 = ['失望', '驚訝', '要求追回通脹'];
Object.keys(公務員團體); // ['0', '1', '2']
Object.getOwnPropertyNames(公務員團體); // ['0', '1', '2', 'length']
// Non-enumerable property
Object.defineProperties(公務員加薪, {
林志偉: {
enumerable: false,
value: '要見特首',
},
});
Object.keys(公務員加薪); // ['加幅']
Object.getOwnPropertyNames(公務員加薪); // ['加幅', '林志偉']