טיפ JavaScript - בואו נסתיר מאפיין מ Object.keys
הפונקציה Object.keys
מחזירה את כל המפתחות באובייקט נכון? לא בדיוק. זאת ההגדרה שלה ב MDN:
The Object.keys() static method returns an array of a given object's own enumerable string-keyed property names.
מילת המפתח כאן היא enumerable
. היא גורמת ל Keys להחזיר רק את המפתחות שיחזרו מ for ... in
, או ליתר דיוק רק את אלה מתוך for ... in
שלא הגיעו מהפרוטוטייפ.
הפעלה רגילה עשויה לתת את ההרגשה שזה כל המפתחות:
const object1 = {
a: 'somestring',
b: 42,
c: false,
};
console.log(Object.keys(object1));
// Expected output: Array ["a", "b", "c"]
אבל זה לא מדויק. ב JavaScript אני יכול להגדיר גם מאפיינים שלא יופיעו ברשימה הזאת במספר דרכים. דרך אחת היא הפונקציה defineProperty
. שימו לב לקוד הבא:
const object1 = {
a: 'somestring',
b: 42,
c: false,
};
Object.defineProperty(object1, 'secret', {
value: 'secret',
enumerable: false
})
console.log(Object.keys(object1));
console.log(object1.secret)
הפעם אנחנו עדיין מקבלים רק את המפתחות a, b ו c, למרות שההדפסה השנייה מצליחה ומדפיסה את המילה secret.
ואיך בכל זאת נקבל את כל רשימת המפתחות כולל אלה שאינם enumerable? ב JavaScript חשבו על הכל ויש פונקציה אחרת בשם getOwnPropertyNames
שמחזירה את כל המפתחות. הקריאה הזו:
console.log(Object.getOwnPropertyNames(object1))
מדפיסה את:
Array ["a", "b", "c", "secret"]