הגדרת טיפוסים בג'אווה סקריפט
נשים לב להבדלים בין חיבור מספרי לחיבור מחרוזות.
<script>
var n1 = 3;
var n2 = 4;
var n = n1+n2;
console.log(n); // 7
var s1 = "3";
var s2 = "4";
var s = s1+s2;
console.log(s); // "34"
</script>
המשתנים n1,n2,n הינם משתנים המחזיקים בערך מספרי או במילים אחרות משתנים מטיפוס מספרי. חיבור שלהם למעשה סוכם את הערכים.
המשתנים s1,s2,s הם משתנים המחזיקים בערך של מחרוזות או במילים אחרות משתנים מטיפוס מחרוזת. חיבור שלהם למעשה משרשר (מצמיד) את הערכים זה לזה.
משתנה מספרי יכול להיות integer שהוא מספר שלם (כגון 4-, 0, 5, 14) או float שהוא שבר (כגון 4.5, 2.425242-, 12.558). הטיפוס תמיד יחשב כמספר, כלומר, אין טיפוס integer וטיפוס float.
הטיפוס הבוליאני
פרט לטיפוסים מספריים ומחרוזות, טיפוס נוסף שבשימוש נרחב הוא הטיפוס boolean שמחזיק בערך בוליאני (true או false).
דוגמה למשתנים בוליאניים:
<script>
var y = true;
var n = false;
var a = y && n; // false
var b = y || n; // true
</script>
הגדרנו את y להיות בעל הערך true ואת n להיות בעל הערך false.
הביטוי y && n מציין "y וגם n" ולכן הוא שווה ערך ל-false. האופרטור && מחזיר true רק אם 2 הערכים לצידיו הם true. אם לפחות אחד מהם הוא false, האופרטור יחזיר false.
הביטוי y || n מציין "y או n" ולכן הוא שווה ערך ל-true. האופרטור || מחזיר true אם לפחות אחד מהערכים לצידיו הוא true. אם שני הערכים הם false, האופרטור יחזיר false.
המרת טיפוסים Type Conversion
ניתן לבצע המרה (conversion) בין טיפוסים שונים של המשתנים, למשל מטיפוס מספרי שהוא integer לטיפוס מספרי שהוא float או מטיפוס מחרוזת לטיפוס מספרי שהוא integer.
דוגמאות להמרות בין טיפוסים:
<script>
var y = true;
console.log(y.toString()); // "true"
var n = 8;
var s = "2";
console.log(s + n.toString()); // "28"
var a = "9.6";
var b = parseInt(a);
var c = parseFloat(a);
console.log(b); // 9
console.log(c); // 9.6
var address = "home number 17";
console.log(parseInt(address)); // NaN
var d = 25;
var e = String(d); // "25";
console.log(e);
var f = "54";
var g = Number(f);
console.log(g); // 54
</script>
הפונקציה toString ממירה מספר (integer או float) למחרוזת. לכן, החיבור הראשון בדוגמה מבוצע בין המחרוזת "8" למחרוזת "2" ומוחזר הערך 28.
הפונקציות parseInt ו-parseFloat ממירות מחרוזת למספר שלם (integer) או לשבר (float). כשנמיר מחרוזת הכוללת שבר, כגון 9.6 למספר שלם, יוחזר רק הערך השלם 9.
נשים לב, כי המרה למספר של מחרוזת שכוללת תווים, למשל המחרוזת "home number 17", מחזירה את הערך NaN שמציין שזהו אינו מספר. NaN הוא למעשה קיצור של המונח Not a Number.
דרך נוספת להמיר מספר למחרוזת היא באמצעות המחלקה String.
באופן דומה, דרך נוספת להמיר מחרוזת למספר היא באמצעות שימוש במחלקה Number. המספר שיווצר יהיה integer או float בהתאם לערך שהומר.
שימוש בביטוי כלשהו לצורך ההמרה (נניח הביטוי String או toString או Number) מכונה Casting. אפשר לומר כי מבחינה תחבירית אנו מבצעים Casting ומבחינה ביצועית, מה שקורה בפועל הוא Conversion.
המרה מאולצת Coercion
עד כה ראינו המרה בין טיפוסים שנעשתה בצורה מפורשת, כלומר, ציינו מפורשות שאנו מבקשים להמיר מטיפוס א' לטיפוס ב' באמצעות Casting.
ניתן גם לבצע המרה בצורה שאינה מפורשת, ללא ציון ברור מה טיפוס היעד שאותו אנו רוצים לקבל. המרה שכזו מכונה Coercion (קוארז'ן).
דוגמה ל-coercion:
<script>
var a = "2";
var b = 3;
var c = a + b;
console.log(c); // "23"
</script>
המשתנה a מחזיק במחרוזת, בעוד המשתנה b מחזיק במספר (integer). חיבור שלהם יגרום להמרה של המספר למחרוזת (ולא להיפך), כך שנקבל את המחרוזת "23" (ולא את הערך המספרי 5).
המלצתנו, היא ככל שניתן לא להשתמש ב-coercion, אלא ב-casting, כלומר, שההמרה תהיה מפורשת. הסיבה לכך, היא כדי לשפר את קריאות הקוד וכדי למנוע שגיאות קוד שיקרו בשל תוצאות חישוב שאינן צפויות.