קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
ראשי ♦ Javascript ♦ Expressions & operators in javascript

Expressions & operators in javascript

עידן יצחקי 14 באפריל 2023 אין תגובות

במאמר זה נעבור על ביטויים, תנאים ומפעילים ב-JS.

נראה מה צורת הכתיבה הנכונה שלהם ומה הם עושים, אחד היתרונות הגדולים שלהם, הוא קיצור שורות הקוד וכך הקוד ברור יותר, נקי יותר ומובן יותר.

number & true/false

ב-JS המילה true שוות ערך ל-1 והמילה false שוות ערך ל-0, לכן אנחנו יכולים לעשות את זה

const a = 1 + true // 2
const b = 1 + false // 1
const c = true + true // 2
const d = false + false // 0

add/sub & equal (+=) או (-=)

בעבר, כדאי לחבר או לחסר לאותו משתנה ערך היינו צריכים לכתוב את המשתנה שווה ועצמו בתוספת הפעולה והמספר, היום זה כבר יותר קצר ואפשר פשוט לרשום את זה כך

let a = 1; // 1
a+=6; // 7
a-=4; // 3

// זה כמו לכתוב --->
let a = 1;
a = a + 6;
a= a - 4;

ניתן גם לחבר טקסט אבל לא לחסר

let a = 'abc';
a+='def'; // abcdef

ternary (?:)

הרעיון של טרנרי הוא פשוט להחליף את if/else ומבחינה רעיונית כותבים אותו דומה

const a = 0 < 1 ? true : false; // true

const val1 = 10;
const val2 = 20;
const a = val1 != val2 ? 'NO' : 'YES'; // 'YES'

// אפשר גם לשרשר

const a = 5 != 5 ? 'OK' : 5 < 5 ? 'NO' : 5 > 5 ? 'NO!!!' : 'EQUAL'; // 'EQUAL'

// נסדר את השורה למעלה כדאי שיהיה יותר ברור
const a = 5 != 5 ? 'OK' :
5 < 5 ? 'NO' :
5 > 5 ? 'NO!!!' :
'EQUAL'; // 'EQUAL'

// זה בדיוק כמו שנכתוב
let a;
if(5 != 5){
a = 'OK'
} else if(5 < 5){
a = 'NO';
} else if(5 > 5){
a = 'NO!!!';
} else{
a = 'EQUAL';
}

אפשר בקלות לראות כמה התצורה הראשונה יותר ברורה מ-if/else.

delete on an object

לאוביקט יש מאפיינים שבנויים ממפתחות וערכים, במידה ואנחנו רוצים למחוק לגמרי מאפיין עם הערך שלו, זה אומר שכאשר נדפיס את האובייקט, המאפיין לא יהיה קיים. ניתן לעשות את זה כך

const a = {
	color:'red',
	name:'jon'
}

delete a.name;
console.log(a); // {color:'red'}

delete a['color'];
console.log(a); // {}

לעלות מספר בחזקה (**)

השיטה הקודמת הייתה Math.pow , בשיטה החדשה פשוט כותבים את זה **, כך קל יותר לעשות תרגיל חשבוני ושהוא ישאר מובן.

const a = 2**3; // 8
const b = 2**-3; // 0.125
const c = (2**3)**3; // 512

// זה הרבה יותר ברור מאשר
const d = Math.pow( Math.pow( 2 , 3 ) , 3 ); // 512

// כמובן שגם כאן אפשר לעשות
let e = 4;
e **= 3; // 64

פעולות קצרות על משתנים

נעבור על מספר פעולות קצרות ומהירות על משתנים ונראה מה התוצאה שלהם

let a = 5;
const b = a++; // b=5 , a=6 
const c = ++a; // c=7 , a=7

const d=5;
const e=5;
console.log(d==e) // true
console.log(d!=e) // false

const f=8;
console.log(e<f) // true
console.log(e>f) // false
console.log("aa"<"ab") // true

console.log(d<=e) // true
console.log(d>=e) // true

console.log(d<=e && e<f) // true
console.log(d<=e && e>f) // false

console.log(d<=e || e>f) // true
console.log(!(d<=e && e>f)) // true

ביצוע בדיקה של סוג משתנה (instanceof)

בעזרת פעולה זו , אנו יכולים לבדוק אם המשתנה שלנו הוא מסוג מסויים ועל פי התוצאה לבצע לוגיקה ספציפית

const a = {name:'abc',title:'def'}
a instanceof Object // true

const b = ['aaa','bbb']
b instanceof Array // true

const n = new Number(123)
n instanceof Number // true

const nb = 123
n instanceof Number // false

const s = new String('abc')
s instanceof String // true

const sb = 'abc'
sb instanceof String // false

שימו לב שהשמה של מלל או מספר ישירות למשתנה לא גורם למשתנה לקבל את הסוג המתאים, זה בגלל שהוא primitive.

nullish (??)

בדיקה של צד שמאל, אם הוא null או undefined אז מופעל צד ימין.

const a = null
const b = a ?? 'OK' // b='OK'

const a = 'abc'
const b = a ?? 'OK' // b='abc'

const c = {color:'red'}
c.color ??='blue' // c='red'
c.title ??='car' // there is no title to c object, but now there is :) c.title = 'car'

זו דרך טובה לבדוק אם ערך מסויים קיים ואם לא אז לשים לו ברירת מחדל.

optional chaining (?.)

שימושי בעיקר אם אנחנו לא בטוחים שהמאפיין הזה קיים. כאשר משתמשים בו, תבוצע בדיקה מאחורי הקלעים אם המאפיין קיים ובמידה שהוא לא קיים התהליך יעצור ויוחזר undefined במקום שגיאה במצב רגיל.

const obj = {
  title:'my obj', 
  colorOptions:{
    optionA:'red',
    optionB:'blur'
  }
}
console.log(obj.title) // 'my obj'
console.log(obj.title.name) // ERROR
console.log(obj.title?.name) // undefined
console.log(obj.colorOptions?.optionA) // 'red'
console.log(obj.colorOptions?.optionA?.color) // undefined

שארית (%)

במידה שאנחנו רוצים לחלק מספר במספר ולקבל את השארית, זו הדרך לעשות את זה. מאוד יעיל אם אנחנו רוצים לבדוק שהמספר שלנו זוגי, אי זוגי או מתחלק למספר אחר בצורה מלאה. שימו לב שאם מחלקים מספר שלילי, אז התוצאה של השארית תהיה שלילית.

console.log(4 % 2) // 0
console.log(-4 % 2) // -0
console.log(4 % 3) // 1
console.log(-4 % 3) // -1
console.log(20 % 5) // 0

spread (…)

ספרד הוא פעולה ממש חזקה ואני ממליץ להתעמק ולכיר את הפעולה הזאת יותר טוב ממה שאני אראה כאן.

const a = [1,2,3];
const b = [3,4,5];
const c = [a,...b];
console.log(c) // [[1,2,3],3,4,5]

const c = [...a,...b];
console.log(c) // [1,2,3,3,4,5]

const c = {...a};
console.log(c) // {0: 1, 1: 2, 2: 3}

const c = ['aaa',...a,'bbb']
console.log(c) // ['aaa', 1, 2, 3, 'bbb']

const d = [2023,0,14] // for [YEAR,MONTH,DAY]
const c = new Date(d) // ERROR
console.log(c) // Invalid Date
const c = new Date(...d)
console.log(c) // Sat Jan 14 2023 00:00:00 GMT+0200 (Israel Standard Time)

const c = [...a] // now c is new copy of a but only first layer

שימו לב, בשורה 21 ראינו העתקה של מערך למערך חדש, מערכים הם בדרך כלל הצבעה לתא בזיכרון ולכן אם עושים const c = a שניהם מצביעים לאותו מקום וזה אומר שאם נשנה אחד מהם נשנה גם את השני.

עם ספרד, זה לא המצב. אבל הוא מעתיק רק את השיכבה הראשונה במערך, אם למערך יש עוד מערכים בפנים, הם לא יעותקו אלא יתבצע הצבעה לאותו התא. משמע, שיכבה ראשונה מועתקת ושיכבה שניה והלאה היא הצבעה לאותו תא בזיכרון.

בדיקת סוג המשתנה (typeof)

במידה שאנחנו רוצים לבדוק את סוג המשתנה שלנו ועל פי התוצאה לבצע פעולה זו דרך די טובה אבל לא ממש מושלמת ואנחנו נראה בהמשך למה.

האופציות לתשובה הן:

  • undefined
  • object
  • boolean
  • number
  • bigint
  • string
  • symbol
  • function

בעיה ראשונה שאפשר לראות, הוא לא יודע להחזיר array (מחזיר object), בעיה שניה היא null – מחזיר object.

זאת אומר שצריך לזכור שצריך טיפול מיוחד אם אנחנו רוצים לבדוק האם מדובר במערך או ב-null.

typeof 1 === "number";
typeof "1" === "string";
typeof "" === "string";
typeof "aaa" === "string";
typeof true === "boolean";
typeof false === "boolean";
typeof Symbol("foo") === "symbol";
typeof undefined === "undefined";
typeof myVar === "undefined";
typeof { title: 'my obj' } === "object";
typeof [1, 2, 3] === "object";
typeof new Date() === "object";
typeof null === "object";
typeof function () {} === "function";

הגענו לסיום, עברנו על כל הדברים החשובים שעוזרים ומקלים עלינו את הפיתוח וההבנה של הקוד. ראינו איך להשתמש ולהפעיל, ראינו כמה זה מצמצם את הקוד שלנו וראינו גם שלא הכל מושלם ובמקרים מסויימים זה לא יעבוד כמו שחשבנו.

בהצלחה 👑

פוסטים קשורים:

תמונת אווירה של קוביות ואת מוזהבתמדריך javascript למתחיל 101 (שיטת כתיבה) לימודי javascript - for loop offor loop of | איטרציה למערכים ב javascript. עם אינדקס javascript closuresClosures in JavaScript | מה זה? תמונת אווירה של בית פאזלאיך לעבור בלולאה על מאפיינים של אובייקט
javascript

אודות המחבר

עידן יצחקי להציג את כל הפוסטים של עידן יצחקי


« פוסט קודם
פוסט הבא »

השארת תגובה

ביטול

חיפוש באתר
בחירת העורכים
29 בדצמבר 2023 עידן יצחקי

שדה טקסט עשיר עם תמונות

אתם הולכים להיות מופתעים עד כמה HTML יכול להיות חכם ולבצע משהו כל כך מורכב, שאם אנחנו היינו רוצים ליצור

1 באוקטובר 2021 עידן יצחקי

איך למשוך דינמית favicon של אתרים אחרים ב-JS

בפוסט זה נראה איך אפשר על פי לינקים בדף למשוך את ה-favicon מהדומיין שלהם באופן דינמי, בדיקה של תקינות התמונה

פופולרי
Javascript functions – היכרות עם סוגי פונקציות
Javascript
21 בדצמבר 2024 אין תגובות
Nested routing in angular standalone component
Typescript
15 בנובמבר 2024 תגובה אחת
בחרו לפי תגיות
angular blockchain css ethers express front-end fullstack GQL html javascript next js nextjs nodejs react hooks reactjs solidity webgl אנגולר בלוקציין וורדפרס לימודי אנגולר לימודי וורדפרס לימוד ריאקט מדריך front-end מדריך GQL מדריך אנגולר מדריך וורדפרס מדריך חינם react מדריך ריאקט מפתח בלוק מפתח בלוקציין מתכנת front-end מתכנת בלוקציין מתכנת פרונט סולידיטי קורס front end קורס fullstack קורס nextjs קורס אנגולר קורס בלוקציין קורס בלוקציין בחינם קורס סולידיטי קורס ריאקט קורס תכנות קורס תכנות בחינם
סינון על פי קטגוריות
CSS fullstack HTML IIS Javascript nodeJs SEO Typescript אנגולר בלוקציין בניית אתרים וורדפרס חיפוש עבודה כלים נוספים כללי נגישות קורסים ריאקט תלת מימד תקלות ופתרונות
צור קשר
כל הזכויות שמורות לקודקודייל
ליצירת קשר: @ קודקודייל
גלילה לראש העמוד