DCSIMG
Javascript - For –לא מה שחשבתם - Don't Worry, Be Happy - Development is FUN

Javascript - For –לא מה שחשבתם

פורסם בתאריך May 28 2011, 04:07 PM על ידי Arnold | ישנם תגובות
תוכנתי NET. מכירים את הלולאה foreach אשר רצה על אוסף של אובייקטים ומטפלת בהם.
ב JavaScript אנחנו משתמשים לרוב בלולאת for סטנדרטית (איפוס, תנאי, וביצוע). ב Javascript ישנה דרך נוספת לרשום את הלולאת for (בדומה ל foreach ב NET.), אך יש לה כמה צדדים מכוערים שעלינו להיזר מהם…
Javascript - For –לא מה שחשבתם
לעבודה!!!!

ניצור אובייקט פשוט:

var me = {
    name: "Arnold",
    lastName: "Simha"
}

נכתוב לולאת for אשר רצה על האובייקט ומציגה את התוכן שלו:

for (var i in me) {
    console.log(i + ":" + me[i])
}

נקבל את:

Javascript - For –לא מה שחשבתם

עד לפה הכל טוב ויפה.
נגיד והכנו האפליקציה ענקית וכתבנו כמה prototypes, לדוגמא:

Object.prototype.fullName = function () {
    return me.Name + " " + me.lastName;
};

אם נריץ עכשיו את אותה ללואה נקבל:

Javascript - For –לא מה שחשבתם

כפי שניתן לראות גם  prototype שכתבנו נכלל ברשימה למרות שהוא לא קיים ב me.

מדוע זה קורה?

מכיוון ש-me הוא מסוג Object אז כל ההגדרות של האובייקט משותפות לו.

אל דאגה, ישנה דרך די פשוטה לפתור את הסוגיה והיא להשתמש ב “hasOwnProperty”:

for (var i in me) {
    if (me.hasOwnProperty && me.hasOwnProperty(i)) {
        console.log(i + ":" + me[i])
    }
}

נריץ שוב ונקבל את התוצאה הרצויה:

Javascript - For –לא מה שחשבתם

מה קרה פה???

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

סוף!

הנכם מוזמנים להגיב, לשאול ולשתף :)