תוכנתי NET. מכירים את הלולאה foreach אשר רצה על אוסף של אובייקטים ומטפלת בהם. ב JavaScript אנחנו משתמשים לרוב בלולאת for סטנדרטית (איפוס, תנאי, וביצוע). ב Javascript ישנה דרך נוספת לרשום את הלולאת for (בדומה ל foreach ב NET.), אך יש לה כמה צדדים מכוערים שעלינו להיזר מהם… |  |
לעבודה!!!!
ניצור אובייקט פשוט:
var me = {
name: "Arnold",
lastName: "Simha"
}
נכתוב לולאת for אשר רצה על האובייקט ומציגה את התוכן שלו:
for (var i in me) {
console.log(i + ":" + me[i])
}
נקבל את:

עד לפה הכל טוב ויפה.
נגיד והכנו האפליקציה ענקית וכתבנו כמה prototypes, לדוגמא:
Object.prototype.fullName = function () {
return me.Name + " " + me.lastName;
};
אם נריץ עכשיו את אותה ללואה נקבל:

כפי שניתן לראות גם prototype שכתבנו נכלל ברשימה למרות שהוא לא קיים ב me.
מדוע זה קורה?
מכיוון ש-me הוא מסוג Object אז כל ההגדרות של האובייקט משותפות לו.
אל דאגה, ישנה דרך די פשוטה לפתור את הסוגיה והיא להשתמש ב “hasOwnProperty”:
for (var i in me) {
if (me.hasOwnProperty && me.hasOwnProperty(i)) {
console.log(i + ":" + me[i])
}
}
נריץ שוב ונקבל את התוצאה הרצויה:

מה קרה פה???
hasOwnProperty בודק אם ה property קיים בתוך האובייקט שעליו אנחנו רצים (מחזיר true או false).
בצורה כזאת חסכנו לעצמנו המון כאב ראש ובלגן.
סוף!
הנכם מוזמנים להגיב, לשאול ולשתף :)