javascript - Object.getOwnPropertyNames กับ Object.keys
ความแตกต่างระหว่าง Object.getOwnPropertyNames และ Object.keys ใน JavaScript คืออะไร? นอกจากนี้หากมีตัวอย่างด้วยจะขอบคุณมาก
คำตอบ #1
มีความแตกต่างเล็กน้อย Object.getOwnPropertyNames(a) จะคืนค่า คุณสมบัติทั้งหมด ของวัตถุ a ของตัวเอง Object.keys(a) จะคืนค่าคุณสมบัติของตัวเองที่ สามารถนับได้ ทั้งหมด ซึ่งหมายความว่าหากคุณกำหนดคุณสมบัติของวัตถุโดยไม่ทำให้บางคุณสมบัติเป็น enumerable: false ทั้งสองวิธีนี้จะให้ผลลัพธ์เหมือนกัน
มันง่ายที่จะทดสอบ:
var a = {};
Object.defineProperties(a, {
one: {enumerable: true, value: 1},
two: {enumerable: false, value: 2},
});
Object.keys(a); // ["one"]
Object.getOwnPropertyNames(a); // ["one", "two"]
หากคุณกําหนดคุณสมบัติโดยไม่ระบุตัวอธิบายแอตทริบิวต์คุณสมบัติ (หมายความว่าคุณไม่ได้ใช้ Object.defineProperties) ตัวอย่างเช่น:
a.test = 21;
แล้วคุณสมบัติเช่นนั้นจะกลายเป็นสิ่งที่สามารถนับจำนวนได้โดยอัตโนมัติและจะแสดงในอาร์เรย์ที่ส่งคืนของทั้งสองวิธี
คำตอบ #2
ความแตกต่างอีกประการหนึ่งคือในกรณีของอาร์เรย์ เมธอด Object.getOwnPropertyNames จะคืนค่าคุณสมบัติเพิ่มเติมนั่นคือ length
var x = ["a", "b", "c", "d"];
Object.keys(x); //[ '0', '1', '2', '3' ]
Object.getOwnPropertyNames(x); //[ '0', '1', '2', '3', 'length' ]
