
Math.round על ערך לא מספרי מחזיר NaN.encodeURI מקודד את רוב התווים, אבל משאיר בלי קידוד את הסימנים האלה, ולכן מתאים לכתובת שלמה. רווח הופך ל-%20.decodeURI או decodeURIComponent, בהתאם לקידוד.String הופך ערך למחרוזת, ו-Number הופך ערך למספר. parseInt ו-parseFloat מחזירים מספר שלם או עשרוני ממחרוזת.parseInt או ב-parseFloat.isFinite בודק שהערך הוא מספר סופי, ו-isNaN מחזיר true אם הערך אינו מספר.encodeURI לא מקודד סימני שאלה ואמפרסנד, ולכן לכתובת שנשלחת כערך של פרמטר צריך את encodeURIComponent.הטקסט המלא של הדקות הראשונות בהרצאה «פונקציות כלליות ב-Javascript» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הדבר הבא שאנחנו הולכים לראות בג'אווה סקריפט בנוגע לאובייקטים אלו מאפיינים ופונקציות כלליות שקיימות בג'אווה סקריפט. מה זה אומר?
ישנם מספר מאפיינים כלליים שאנחנו יכולים להשתמש איתם בכל מקום ומספר פונקציות כלליות שאנחנו יכולים להשתמש איתם בכל מקום ששייכות לג'אווה סקריפט. חלק מהם אנחנו כבר ראינו אבל בואו נעשה קצת סדר בהם.
אז ראשית מה שאנחנו נראה זה Global Properties ששייכים לג'אווה סקריפט. הפרופרטי הראשון שאנחנו הולכים לראות נקרא nan זה בעצם קיצור של not a number.
המאפיין הזה בעצם מציין כאשר מציין בעצם ערך שאנחנו חושבים שהוא אמור להיות מספר אבל בעצם הוא לא מכיל מספר. בואו נראה איפה בעצם יש שימוש בדבר הזה.
נניח שאנחנו הולכים לפונקציה math.round ואנחנו רוצים לבצע עיגול של איזשהו משתנה var x אבל בתוך המשתנה הזה יש ערך שהוא לא מספרי. פונקציית ראונד תחזיר אז למעשה מה שאנחנו יכולים לראות זה שפונקציית ראונד הולכת להחזיר את אותו ערך שנקרא n-a-n ו-n-a-n שווה ל-not a number זאת
אומרת שראונד הייתה אמורה לקבל מספר ולבצע עליו איזושהי פעולת עיגול אבל לא הבאנו לה מספר הבאנו לה ערך שהוא לא מספרי ולכן היא מחזירה not a number. דבר הבא שאנחנו יכולים לראות זה ערך שמציין בעצם אינסוף אם יש לי איזשהו משתנה ואנחנו מחלקים אותו באפס מה ערכו של y בואו נראה את זה אז ערכו של y הוא infinite או infinity אם בעצם אנחנו מבצעים
השוואה ל-y אנחנו יכולים לבדוק האם y שווה ל-infinity אם כן אנחנו יכולים להגדיר את זה או לבצע פעולות מסוימות כאשר y שווה ל-infinity בואו נסתכל ואנחנו רואים שאכן ההשוואה התבצעה ו-y שווה ל-infinity קבוע הבא או הערך הבא שקיים בג'אווה סקריפט נקרא undefined.
undefined מציין כאשר יש לנו איזשהו משתנה שלא הכנסנו אליו ערך ואנחנו רוצים לראות מה בעצם יש בתוכו אז אנחנו רואים שהמערכת מגדירה לנו undefined. הרבה פעמים יש לנו פונקציה מסוימת שמקבלת כמה ערכים אנחנו יכולים לשלוח לה רק חלק מהערכים אם אנחנו שולחים לה רק חלק מהערכים הערכים האחרים הם undefined בואו נסתכל הצגה של הערכים ונשלח לפונקציה רק ערך אחד
ונראה ששאר הערכים מוגדרים כ-undefined. ככה יש לנו אפשרות לגלות האם נשלחו הערכים לפונקציה או לא נשלחו הערכים לפונקציה ואנחנו כמובן גם יכולים לבדוק האם z הוא undefined וכך בעצם לדעת האם הוא אכן undefined.
אז אנחנו רואים שה-e התבצע וגילינו בעצם שאין ערך בתוך z אז אלו היו שלושה פרמטרים קבועים ששייכים ל-JavaScript. אילו פונקציות גלובליות קיימות ב-JavaScript.
בואו נראה את ה-Global Functions. ראשית, אנחנו נתחיל עם פונקציות שמבצעות משהו שנקרא Decoding ו-Encoding. אז מה היא בעצם המטרה?
ב-JavaScript הרבה פעמים אנחנו שולחים לינק מסוים לדף אחר, או בעצם רוצים להגדיר איזשהו לינק ולשלוח אותו כפרמטר לדף אחר. לא חייב להיות לינק, יכול להיות כל מיני ערכים שאנחנו רוצים לשלוח לדף אחר.
הבעיה היא, כאשר אנחנו מתעסקים עם לינקים, אז הלינק נראה בפורמט הבא. בוא נניח שיש לי איזשהו אתר, http://mysite.com. האתר הזה מכיל איזשהו דף, mypages.htm ואני רוצה אבל להעביר לו פרמטרים.
איך אנחנו מעבירים פרמטרים? אנחנו מגדירים סימן שאלה וזה בעצם מפריד בין טובת ה-url של הדף לבין הפרמטרים שאנחנו מעבירים. ואז אנחנו רוצים להעביר את הפרמטרים, הפרמטרים מגיעים בזוגות זוגות של שם שווה ערך.
לדוגמה first name שווה מוישה ואז אנחנו רוצים עוד פרמטר אז אנחנו מגדירים ampersand age שווה 30 אבל מה קורה אם הפרמטר עצמו הוא בעצם כתובת url לדוגמה my best page או my best link שווה ואני רוצה להעביר את הלינק שהלינק הוא http://mysecondsite.com וכמובן גם עוד משתנים לדוגמה your name שווה חיים וכולי וכולי אז עכשיו יש לנו פה
איזושהי בעיה מה הבעיה שנוצרה הערך שאני רוצה להעביר הוא גם לינק והוא יכול בעצם לעשות מספר בעיות למערכת שתחשוב שזה בעצם לינק רגיל או לא תדע איך לפרש את הערכים שלו כי גם כאן אני רואה שיש לי סימן שאלה, גם כאן אני רואה שיש לי משתנים, שהם, או יותר נכון תווים, שהם אמפרסנט, שיכולים לבלבל בין התווים האלה.
ולכן מה שהגדירו זה כאשר אני רוצה להתעסק עם לינקים, עדיף בעצם לעשות משהו שנקרא Encoding על הלינקים, ולהפוך את כל התווים האלה של הלינקים לתווים שלא יעשו שום בעיות.
בעצם אנחנו רוצים לעשות קידוד לכל התווים, כך שבמקום שיהיה לנו סימן שאלה, אין לנו איזשהו סדרה של תווים אלפא נומריים שמייצגים סימן שאלה וכולי. אז איך בעצם אפשר לבצע את זה?
אז ישנן כמה פונקציות. פונקציה ראשונה נקראת encode URI. כאשר URI זה מקרה כללי יותר של URL. URI זה קיצור של Universal Resource Identifier ו-URL זה Universal Resource Locator.
כאשר URI מתייחס לדף URI מתייחס לאיזשהו משאב מסוים באינטרנט, לא משנה מה הוא, יכול להיות תמונה, יכול להיות קובץ טקסט, לא משנה מה זה.
אז encode URI מקבלת את הלינק בעצם שאנחנו רוצים להמיר, ומחזירה לנו את הלינק מומר, אבל היא לא מתייחסת למספר תווים מסוימים. בואו נסתכל, נגדיר לה איזשהו דף, נקבל את הערך ונציג.
אז בעצם אנחנו רואים שמה שמוצג לנו זה ממש אותו הדבר, אנחנו כאילו לא רואים את השינוי שהתבצע על ידי הפונקציה הזאתי, והסיבה היא שהפונקציה לא מתייחסת לתווים כמו סימן שאלה, היא לא מתייחסת לתווים כמו אמפרסנט, אלא לתווים מיוחדים אחרים. בואו ננסה להגדיר first name שווה מוישה בן דוד.
נגדיר שזה name. כעת אנחנו כן רואים שהפונקציה עבדה על space והגדירה ש-space זה אחוז 2.0. הסיבה היא מפני ש-2.0 זה ב-unicode 32, ו-32 זה התו של סליחה ליתר דיוק אמפרסנט 20 זה בהקסה 32 ו-32 זה היוניקוד של ספייס.
זאת הסיבה שאנחנו רואים אמפרסנט 20. זה שהמערכת לקחה ספייס והפכה אותו למעין תו מקודד. בואו ננסה להגדיר לה בעברית ונראה מה קורה. אוקיי, הגדרנו פה איזשהו שם בעברית ונראה שגם התווים בעברית עברו קידוד אבל התווים באנגלית לא עברו שום קידוד.
פונקציה נוספת שקיימת שמאפשרת בעצם לפענח את מה ש-Encode עשתה זה Decode URI. אז בואו נפתח פה איזשהו משתנה var, נקרא לו str1 ונכניס את מה שחוזר מ-Encode URI.
נציג את str1. לאחר מכן ניקח var str2 ונקרא ל-Decode URI, נשלח לה את str1 ואנחנו הולכים לראות בעצם ש-Decode URI הולכת להחזיר לנו בחזרה את המחרוזת.
אנחנו רואים את המחרוזת המקודדת ואנחנו רואים שהמערכת החזירה לנו אותה בחזרה ככה אנחנו יכולים בעצם לקודד מחרוזת לשלוח אותה לדף יעד בלי שהיא תעשה צרות ובדף היעד להחזיר אותה בחזרה לערך המקורי שלה אם אנחנו משתמשים ב-Encode URI אנחנו צריכים להשתמש בחזרה ב-Decode URI אבל Encode URI לא
מקודדת תווים שהם פסיק סלאש סימן שאלה נקודותיים סימן העט אמפרסנט שווה פלוס דולר סולמית אלה תווים שהיא לא מקודדת אם אנחנו לא צריכים להתעסק עם התווים האלה encode URI מתאימה לנו אם אנחנו כן צריכים להתעסק איתם אז כדאי לנו להשתמש בפונקציה אולי אחרת בואו ניקח str3 str4 והפונקציה הנוספת
שקיימת encode URI component component מבצעת בדיוק את אותו הדבר אבל כן מקודדת את התווים שהגדרנו פה למעלה בשביל לפענח אותה אנחנו צריכים להשתמש ב-decode URI Component אז כעת בעצם אנחנו רואים את אותו הדבר אבל התווים שקודדו הם כן סימן שאלה אמפרסנט או כל דבר אחר שיכל להיות לנו שם בואו
נסתכל שוב פעם ונראה מה קרה לתווים באנגלית תווים באנגלית אנחנו רואים שבעצם לא קרה איתם שום דבר פונקציה נוספת שמבצעת פחות או יותר את אותו הדבר קצת יותר חדישה ונהוג יותר להשתמש איתה זה פונקציית escape ו-un-escape.
הן בעצם מבצעות מה ש-Encode URI מבצעת ו-Decode URI מבצעת. בואו נגדיר כאן str5 ו-str6 ונשתמש ב-escape ובשביל לבצע את הכידוד ההפוך un-escape.
יש לנו כאן את המחרוזת שבעצם כל דבר בחוץ מתווים באנגלית קודד ויש לנו את ה-decode שמחזיר את זה בחזרה למחרוזת המקורית. אז אלה פונקציות שמאפשרות לקודד מחרוזת בעיקר בשביל לשלוח אותה למקום אחר לדף שני.
שתי פונקציות מעניינות אחרות שקיימות לנו בצורה גלובלית זה פונקציות המרה. פונקציה אחת מאפשרת להפוך ערך למחרוזת, פונקציה שנייה מאפשרת להפוך ערך למספר שלם.