Module ⧍ ¡ type, operator āĻāϰ coercion: '5' + 2 āĻā§āύ 7 āύāĻž
āĻĒā§āϰāϤāĻŋāĻāĻž operator, āĻāĻāĻāĻž āĻāĻāĻāĻž āĻāϰā§
āĻāĻ lesson-āĻ āϝāĻž āĻļāĻŋāĻāĻŦā§
- āĻāĻāĻāύ programmer āϰā§āĻ āϝāϤ operator āϞā§āĻā§,
+āĻĨā§āĻā§??=āĻĒāϰā§āϝāύā§āϤ, āϏāĻŦāĻā§āϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§, āĻāϰ number āĻŦāĻž string āĻĒā§āϞ⧠āĻā§āύāĻāĻž āĻā§ āĻĻā§āĻŦā§ āĻāĻā§āĻ āĻŦāϞāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤ &&,||āĻāϰ??āĻā§āύ āύāĻŋāĻā§āϰ āĻāĻāĻāĻž operand-āĻ āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ, āĻŦā§āĻāĻŋāϝāĻŧā§ āĻŦāϞāϤ⧠āĻĒāĻžāϰāĻŦā§, āĻāϰ||āĻŦāĻž??āĻĻāĻŋāϝāĻŧā§ default āĻŦāϏāĻžāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤- Precedence āĻĻā§āĻā§ āĻāĻāĻāĻž expression āĻā§āĻāĻžāĻŦā§ āĻā§āĻ āĻŦāĻžāĻāϧ⧠āĻŦāϞāϤ⧠āĻĒāĻžāϰāĻŦā§, āĻāϰ āĻā§āύ⧠value āĻŽā§āύ⧠āύāĻŋāϤ⧠āύāĻž āĻĒāĻžāϰāϞ⧠operator āϝ⧠āϤāĻŋāύāĻāĻž TypeError āĻĻā§āϝāĻŧ, āϏā§āĻā§āϞ⧠āĻĒāĻĄāĻŧāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤
Maria āĻāĻžāϝāĻŧ, āĻāϰ score āĻ āĻŋāĻ 5 āĻšāϞ⧠āϤāĻŦā§āĻ āĻāĻāĻāĻž message āĻāϏā§āĻāĨ¤ āĻāϰ variable-āĻ āĻāĻā§ 3, āĻāϰ āĻ āϞā§āĻā§ if (x = 5)āĨ¤ Program āĻā§āύ⧠error āĻāĻžāĻĄāĻŧāĻžāĻ āĻāϞā§, āĻāϰ message-āĻāĻžāĻ print āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤ āĻāĻŋāĻā§ crash āĻāϰā§āύāĻŋ, āĻ
āĻĨāĻ āĻāϤā§āϤāϰ āĻā§āϞ: bug-āĻāϰ āĻŽāϧā§āϝ⧠āĻāĻāĻžāĻ āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻžāϰāĻžāĻĒ āĻāĻžāϤāĨ¤ Maria āĻāϏāϞ⧠āĻā§ āĻāĻŋāĻā§āĻā§āϏ āĻāϰā§āĻāĻŋāϞ, āϏā§āĻāĻž āĻŦāϞāĻŦā§ assignment-āĻāϰ āĻ
āĻāĻļāĻāĻžāĨ¤
Operator āĻšāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻž āĻāĻŋāĻšā§āύ, āϝā§āĻāĻž āĻāĻ, āĻĻā§āĻ āĻŦāĻž āϤāĻŋāύāĻāĻž value āύā§āϝāĻŧ, āϝāĻžāĻĻā§āϰ āĻŦāϞ⧠āĻāϰ operand, āĻāϰ āĻŦāĻĻāϞ⧠āĻāĻāĻāĻž āύāϤā§āύ value āĻĻā§āϝāĻŧāĨ¤ āĻāĻ lesson āĻĒā§āϰāϤāĻŋāĻāĻž āĻĒāϰāĻŋāĻŦāĻžāϰā§āϰ āĻāĻžāĻā§ āĻāĻāĻŦāĻžāϰ āĻāϰ⧠āϝāĻžāĻŦā§: āϤāĻžāϰ āĻāĻĄāĻŧāύ, āĻāϝāĻŧā§āĻ āϞāĻžāĻāύ code, āϤāĻžāϰ āĻāϏāϞ output, āĻāϰ āϝ⧠āĻāĻāĻāĻž āĻāĻŋāύāĻŋāϏ⧠āĻā§āĻ āϰāĻžāĻāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻāĻāĻž operator-āĻāϰ āĻāϰāĻ āĻāϤ āĻāĻŽ āϝ⧠āĻŽāĻžāĻĒāĻžāϰ āĻŽāϤ⧠āĻāĻŋāĻā§ āύā§āĻ, āϤāĻžāĻ āĻ āύā§āϝ topic lesson-āĻāϰ cost-āĻāϰ āϞāĻžāĻāύāĻāĻž āĻāĻāĻžāύ⧠āĻāĻā§āĻā§ āĻāϰā§āĻ āϰāĻžāĻāĻž āĻšāϝāĻŧāύāĻŋāĨ¤
āĻāĻŖāĻŋāϤā§āϰ operator: + - * / % **
āĻāĻŖāĻŋāϤā§āϰ operator
a + b a - b a * b a / b a % b a ** b
+a -a
%āĻĻā§āϝāĻŧ āĻāĻžāĻāĻļā§āώ, āĻāϰ**āĻĻā§āϝāĻŧa-āϰbāĻāĻžāϤāĨ¤+aāĻāϰ-aāύā§āϝāĻŧ āĻāĻāĻāĻžāĻ operand: āϏā§āĻāĻžāĻā§ number āĻŦāĻžāύāĻžāϝāĻŧ, āĻāϰ-aāĻāĻŋāĻšā§āύāĻāĻžāĻ āĻāϞā§āĻā§ āĻĻā§āϝāĻŧāĨ¤
console.log(7 + 2, 7 - 2, 7 * 2, 7 / 2);
console.log(7 % 2, -7 % 3, 2 ** 10);
console.log(+"42", -"3", +"", +"4 2");
console.log(10 - 2 - 3, 2 ** 3 ** 2);
9 5 14 3.5
1 -1 1024
42 -3 0 NaN
5 512
āĻāĻžāĻ āĻāϰāϞ⧠āĻāĻā§āύāĻžāĻāĻļ āĻĨā§āĻā§ āϝāĻžāϝāĻŧ (Module 1), āĻāϰ āĻāĻžāĻāĻļā§āώā§āϰ āĻāĻŋāĻšā§āύ āĻšāϝāĻŧ āĻŦāĻžāĻ āĻĻāĻŋāĻā§āϰ operand-āĻāϰ āĻŽāϤā§āĨ¤ āĻāĻ-operand-āĻāϰ + āĻ āĻŋāĻ lesson 01-āĻāϰ Number()-āĻāϰ āĻŽāϤā§āĻ convert āĻāϰā§: "" āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ 0, āĻāϰ "4 2" āĻšāϝāĻŧ NaNāĨ¤
āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ operator āĻŦāĻžāĻ āĻĨā§āĻā§ āĻĄāĻžāύ⧠āĻā§āĻ āĻŦāĻžāĻāϧā§, āϤāĻžāĻ 10 - 2 - 3 āĻŽāĻžāύ⧠(10 - 2) - 3āĨ¤ Power operator āĻā§āĻ āĻŦāĻžāĻāϧ⧠āĻĄāĻžāύ āĻĨā§āĻā§ āĻŦāĻžāĻāϝāĻŧā§: 2 ** 3 ** 2 āĻŽāĻžāύ⧠2 ** 9, āĻ
āϰā§āĻĨāĻžā§ 512āĨ¤
āϝā§āĻāĻžāϝāĻŧ āĻā§āĻ āϰāĻžāĻāĻŦā§: āĻā§āύ⧠āĻāĻ āĻĒāĻžāĻļā§ string āĻĨāĻžāĻāϞ⧠+ text āĻā§āĻĄāĻŧāĻž āϞāĻžāĻāĻžāϝāĻŧ (lesson 01)āĨ¤ āϤāĻžāĻ āĻ
āύā§āϝ āĻā§āĻ āĻĒāĻĄāĻŧāĻŦā§ āĻāĻŽāύ āϞāĻžāĻāύ⧠+x-āĻāϰ āĻŦāĻĻāϞ⧠āϞā§āĻā§ Number(x)āĨ¤ āĻāĻžāĻ āĻāĻāĻ, āĻāĻŋāύā§āϤ⧠āĻā§ āĻāϰāĻā§ āϏā§āĻāĻž āĻŽā§āĻā§ āĻŦāϞ⧠āĻĻā§āϝāĻŧāĨ¤
Increment āĻāϰ decrement: ++ āĻāϰ --
Increment āĻāϰ decrement
x++ x-- postfix: āĻāĻā§āϰ value āĻĻā§āϝāĻŧ, āϤāĻžāϰāĻĒāϰ x āĻŦāĻĻāϞāĻžāϝāĻŧ
++x --x prefix: āĻāĻā§ x āĻŦāĻĻāϞāĻžāϝāĻŧ, āϤāĻžāϰāĻĒāϰ āύāϤā§āύ value āĻĻā§āϝāĻŧ
xāĻšāϤ⧠āĻšāĻŦā§ āĻāĻāĻāĻžletvariable; āĻĒā§āϰāϤāĻŋāĻāĻž āϰā§āĻĒ 1 āϝā§āĻ āĻāϰ⧠āĻŦāĻž 1 āĻŦāĻžāĻĻ āĻĻā§āϝāĻŧāĨ¤
let a = 5;
console.log(a++, a);
let b = 5;
console.log(++b, b);
5 6
6 6
āĻĻā§āĻāĻāĻž variable-āĻ āĻļā§āώ⧠6āĨ¤ āϤāĻĢāĻžāϤāĻāĻž āĻšāϞ⧠expression āύāĻŋāĻā§ āĻā§āύ value āĻĻā§āϝāĻŧ: a++ console.log-āĻā§ āĻĻāĻŋāϝāĻŧā§āĻā§ āĻĒā§āϰāύ⧠5, āĻāϰ ++b āĻĻāĻŋāϝāĻŧā§āĻā§ āύāϤā§āύ 6āĨ¤ āĻāϞāĻžāĻĻāĻž āϞāĻžāĻāύ⧠āĻāĻāĻž āĻĨāĻžāĻāϞ⧠count++; āĻāϰ ++count; āĻšā§āĻŦāĻšā§ āĻāĻāĻ āĻāĻžāĻ āĻāϰā§āĨ¤
āϝā§āĻāĻžāϝāĻŧ āĻā§āĻ āϰāĻžāĻāĻŦā§: āĻŦāĻĄāĻŧ āĻā§āύ⧠expression-āĻāϰ āĻāĻŋāϤāϰ⧠x++-āĻāϰ value āϤāĻāύāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āϝāĻāύ āϏāϤā§āϝāĻŋāĻ āĻĒā§āϰāύ⧠value-āĻāĻž āĻāĻžāĻāĨ¤ 5++ āϞāĻŋāĻāϞ⧠program āĻāϞāĻžāϰ āĻāĻā§āĻ āĻĨā§āĻŽā§ āϝāĻžāϝāĻŧ, āϏāĻžāĻĨā§ SyntaxError: Invalid left-hand side expression in postfix operation, āĻāĻžāϰāĻŖ āĻŦāĻĻāϞāĻžāύ⧠āϝāĻžāϝāĻŧ āĻļā§āϧ⧠variableāĨ¤ const-āĻāϰ āĻāĻĒāϰ āĻāϰāϞ⧠āĻĒāĻžāĻŦā§ Module 1-āĻāϰ TypeError: Assignment to constant variable.
āϤā§āϞāύāĻž: āĻā§āĻ, āĻŦāĻĄāĻŧ āĻāϰ āĻāĻžāϰ āϰāĻāĻŽā§āϰ āϏāĻŽāĻžāύ
āϤā§āϞāύāĻž
a < b a > b a <= b a >= b
a === b a !== b a == b a != b
- āĻĒā§āϰāϤāĻŋāĻāĻž āϤā§āϞāύāĻž āĻāĻāĻāĻž boolean āĻĻā§āϝāĻŧ:
trueāĻ āĻĨāĻŦāĻžfalseāĨ¤ ===āĻāϰ!==type āĻāϰ value āĻĻā§āĻāĻāĻžāĻ āĻŽā§āϞāĻžāϝāĻŧ, āĻāĻŋāĻā§ convert āύāĻž āĻāϰā§;==āĻāϰ!=āĻāĻā§ convert āĻāϰ⧠āύā§āϝāĻŧāĨ¤
console.log(3 < 5, 5 <= 5, 2 > 9, 9 >= 10);
console.log(1 === 1, 1 === "1", 1 !== "1");
console.log(1 == "1", 1 != "1", null == undefined);
console.log("10" < 9, "7" >= 7);
true true false false
true false true
true false true
false true
!== āĻāϰ != āĻšāϞ⧠=== āĻāϰ ==-āĻāϰ āĻāϞā§āĻā§āĨ¤ Lesson 01 ===-āĻā§ default āĻŦāĻžāύāĻŋāϝāĻŧā§āĻā§; == āĻā§āĻĨāĻžāϝāĻŧ āϏāϤā§āϝāĻŋāĻ āĻāĻžāĻā§āϰ, āϏā§āĻāĻž āĻĻā§āĻāĻžāĻŦā§ lesson 04āĨ¤ āĻāĻāĻĻāĻŋāĻā§ number āĻāϰ āĻ
āύā§āϝāĻĻāĻŋāĻā§ string āĻĨāĻžāĻāϞ⧠string-āĻāĻž number āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ, āϤāĻžāĻ "10" < 9 āĻāϏāϞ⧠10 < 9, āĻŽāĻžāύ⧠falseāĨ¤
āϝā§āĻāĻžāϝāĻŧ āĻā§āĻ āϰāĻžāĻāĻŦā§: āĻĻā§āĻ āĻĒāĻžāĻļā§āĻ string āĻšāϞ⧠āĻāĻŋāĻā§āĻ convert āĻšāϝāĻŧ āύāĻžāĨ¤ āĻĒāϰā§āϰ āĻ āĻāĻļā§āϰ āĻāĻŽāĻāĻāĻž āĻāϏ⧠āϏā§āĻāĻžāύ āĻĨā§āĻā§āĻāĨ¤
āĻĻā§āĻāĻāĻž string āϤā§āϞāύāĻž āĻšāϝāĻŧ text āĻšāĻŋāϏā§āĻŦā§, āϏāĻāĻā§āϝāĻž āĻšāĻŋāϏā§āĻŦā§ āύāĻž
const a = "10";
const b = "9";
console.log(a < b);
console.log(Number(a) < Number(b));
true
false
āĻĒā§āϰāϤāĻŋāĻāĻž character-āĻāϰ āĻāĻāĻāĻž āϏāĻāĻā§āϝāĻž āĻāĻā§, āϤāĻžāϰ code: "1" āĻšāϞ⧠49, āĻāϰ "9" āĻšāϞ⧠57 (āĻĒā§āϰ⧠table-āĻāĻž āĻĻā§āĻāĻžāĻŦā§ Module 3)āĨ¤ āĻĻā§āĻāĻāĻž string āĻŦāĻžāĻ āĻĻāĻŋāĻ āĻĨā§āĻā§ code āϧāϰ⧠āϧāϰ⧠āϤā§āϞāύāĻž āĻšāϝāĻŧ, āĻ āĻŋāĻ āϝā§āĻāĻžāĻŦā§ dictionary āĻļāĻŦā§āĻĻ āϏāĻžāĻāĻžāϝāĻŧāĨ¤ "10" āĻāϰ "9" āĻĒā§āϰāĻĨāĻŽ character-āĻāĻ āĻāϞāĻžāĻĻāĻž, 49 āĻŦāύāĻžāĻŽ 57, āϤāĻžāĻ "10" āĻāĻā§ āĻāϏā§, āĻŦāĻžāĻāĻŋāĻāĻž āĻāϰ āĻĻā§āĻāĻžāĻ āĻšāϝāĻŧ āύāĻžāĨ¤
āϏāĻŽāĻžāϧāĻžāύ āĻšāϞ⧠āĻĻā§āĻ āĻĒāĻžāĻļāĻā§āĻ āĻāĻā§āĻā§ āĻāϰ⧠convert āĻāϰāĻž, āĻļā§āώ āϞāĻžāĻāύ⧠āϝā§āĻŽāύ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§; starter-āĻ āĻĒāĻĄāĻŧā§ nextInt() āĻĻāĻŋāϝāĻŧā§, next() āĻĻāĻŋāϝāĻŧā§ āύāĻžāĨ¤ āϤāĻžāĻ "10" < "9" āĻšāϞ⧠true, āĻāϰ Number("10") < Number("9") āĻšāϞ⧠falseāĨ¤
Logical operator āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ āύāĻŋāĻā§āϰ āĻāĻāĻāĻž operand
Logical operator
a && b a falsy āĻšāϞ⧠a āĻĻā§āϝāĻŧ, āύāĻž āĻšāϞ⧠b
a || b a truthy āĻšāϞ⧠a āĻĻā§āϝāĻŧ, āύāĻž āĻšāϞ⧠b
!a a falsy āĻšāϞ⧠true āĻĻā§āϝāĻŧ, āύāĻž āĻšāϞ⧠false
- Truthy āĻāϰ falsy lesson 01-āĻāϰ āĻļāĻŦā§āĻĻ: āĻāϝāĻŧāĻāĻž falsy value, āĻŦāĻžāĻāĻŋ āϏāĻŦ truthyāĨ¤
console.log(0 && "yes", 3 && "yes");
console.log("" || "guest", "Zara" || "guest");
console.log(!0, !"text", !!"text");
console.log(false && console.log("never printed"));
0 yes
guest Zara
true false true
false
āĻĒā§āϰāĻĨāĻŽ āĻĻā§āĻ āϞāĻžāĻāύ⧠āĻā§āĻĨāĻžāĻ true āĻŦāĻž false āύā§āĻ: && āĻāϰ || āύāĻŋāĻā§āϰ āĻāĻāĻāĻž operand-āĻ āĻšā§āĻŦāĻšā§ āĻĢā§āϰāϤ āĻĻā§āϝāĻŧāĨ¤ āϏāĻŦāϏāĻŽāϝāĻŧ boolean āĻĻā§āϝāĻŧ āĻļā§āϧ⧠!, āϤāĻžāĻ !!x āĻŽāĻžāύ⧠Boolean(x)āĨ¤
āĻļā§āώ āϞāĻžāĻāύāĻāĻž āĻĻā§āĻāĻžāϝāĻŧ short-circuit: āĻŦāĻžāĻ āĻĒāĻžāĻļā§āĻ āĻāϤā§āϤāϰ āĻ āĻŋāĻ āĻšāϝāĻŧā§ āĻā§āϞ⧠āĻĄāĻžāύ āĻĒāĻžāĻļāĻāĻž āĻāϰ āĻāϞā§āĻ āύāĻž, āϤāĻžāĻ āĻāĻŋāϤāϰā§āϰ console.log-āĻā§ āĻāĻāύ⧠call āĻāϰāĻž āĻšāϝāĻŧāύāĻŋāĨ¤
āĻĻā§āĻāĻāĻž āĻāĻĨāĻž āĻāĻāϏāĻžāĻĨā§ āĻāϰā§, āϤāĻžāĻšāϞ⧠name || "guest" āĻāĻāĻāĻž default āĻŦāϏāĻžāϝāĻŧ: āύāĻžāĻŽ truthy āĻšāϞ⧠āύāĻžāĻŽāĻāĻžāĻ, āύāĻž āĻšāϞ⧠"guest"āĨ¤ āϝā§āĻāĻžāϝāĻŧ āĻā§āĻ āϰāĻžāĻāĻŦā§: || āĻĒā§āϰāϤāĻŋāĻāĻž falsy value-āĻā§āĻ āϏāϰāĻŋāϝāĻŧā§ āĻĻā§āϝāĻŧ, āĻāĻŽāύ āĻāĻŋāĻā§āĻā§āĻ āϝā§āĻāĻž āĻāϏāϞ⧠āĻ āĻŋāĻ āĻāϤā§āϤāϰ āĻšāϤ⧠āĻĒāĻžāϰāϤ, āϝā§āĻŽāύ āĻāĻā§āĻā§ āĻāϰ⧠āĻāĻžāϞāĻŋ āϰāĻžāĻāĻž āĻāĻāĻāĻž āύāĻžāĻŽāĨ¤
Nullish coalescing: ?? āĻŦāύāĻžāĻŽ ||
Nullish coalescing
a ?? b a āĻĻā§āϝāĻŧ, āĻļā§āϧ⧠a null āĻŦāĻž undefined āĻšāϞ⧠āĻĻā§āϝāĻŧ b
- Nullish āĻŽāĻžāύ⧠null āĻŦāĻž undefined, Module 1-āĻāϰ āϏā§āĻ āĻĻā§āĻāĻāĻž "āĻā§āύ⧠value āύā§āĻ" valueāĨ¤
const nickname = "";
console.log("with ||: [" + (nickname || "guest") + "]");
console.log("with ??: [" + (nickname ?? "guest") + "]");
console.log(null ?? "guest", undefined ?? "guest", false ?? "guest");
with ||: [guest]
with ??: []
guest guest false
Zara āĻāĻā§āĻā§ āĻāϰā§āĻ āĻāϰ nickname āĻāĻžāϞāĻŋ āϰā§āĻā§āĻā§āĨ¤ || āĻāϰ āĻĒāĻāύā§āĻĻāĻāĻž āĻĢā§āϞ⧠āĻĻāĻŋāϝāĻŧā§āĻā§, āĻāĻžāϰāĻŖ "" falsyāĨ¤ ?? āϏā§āĻāĻž āϰā§āĻā§ āĻĻāĻŋāϝāĻŧā§āĻā§, āϤāĻžāĻ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āϞāĻžāĻāύā§āϰ bracket āĻĻā§āĻāĻāĻžāϰ āĻāĻŋāϤāϰ⧠āĻāĻŋāĻā§ āύā§āĻāĨ¤ ?? fallback āĻāϰ⧠āĻļā§āϧ⧠null āĻāϰ undefined-āĻ, āĻŦāĻžāĻāĻŋ āϏāĻŦ value āϰā§āĻā§ āĻĻā§āϝāĻŧ, false-āĻāĨ¤
āϝā§āĻāĻžāϝāĻŧ āĻā§āĻ āϰāĻžāĻāĻŦā§: parentheses āĻāĻžāĻĄāĻŧāĻž ?? āĻāĻŋāĻā§āϤā§āĻ || āĻŦāĻž &&-āĻāϰ āĻĒāĻžāĻļā§ āĻŦāϏāĻŦā§ āύāĻž ("āϝ⧠āĻā§āϞāĻā§āϞ⧠āϏāĻŦāĻžāĻ āĻāϰā§"-āϰ 4 āύāĻŽā§āĻŦāϰ)āĨ¤ āĻĻā§āĻāĻāĻžāϰ āĻŽāϧā§āϝ⧠āĻā§āύāĻāĻž āύā§āĻŦā§, āϏā§āĻāĻž āĻ āĻŋāĻ āĻāϰāĻž lesson 04-āĻāϰ āĻāĻžāĻāĨ¤
Optional chaining: ?. (āĻāĻ āĻāϞāĻ)
Optional chaining
value?.name value null āĻŦāĻž undefined āĻšāϞ⧠undefined āĻĻā§āϝāĻŧ, āύāĻž āĻšāϞ⧠value.name
const user = { name: "Zara" };
const nobody = null;
console.log(user?.name, nobody?.name);
console.log(nobody?.name ?? "guest");
Zara undefined
guest
{ name: "Zara" } āĻšāϞ⧠āĻāĻāĻāĻž object, āĻŽāĻžāύ⧠āύāĻžāĻŽ āĻĻā§āĻāϝāĻŧāĻž āĻāϝāĻŧā§āĻāĻāĻž āĻ
āĻāĻļāĻāϝāĻŧāĻžāϞāĻž āĻāĻāĻāĻž value, āĻāϰ user.name āϤāĻžāϰ āĻāĻāĻāĻž āĻ
āĻāĻļ āĻĒāĻĄāĻŧā§āĨ¤ Object āĻļā§āĻāĻžāĻŦā§ Module 8āĨ¤ null-āĻāϰ āĻāĻĒāϰ āϏāĻžāϧāĻžāϰāĻŖ dot āĻĻāĻŋāϞ⧠program āĻĨā§āĻŽā§ āϝāĻžāϝāĻŧ: nobody.name āĻĻā§āϝāĻŧ TypeError: Cannot read properties of null (reading 'name')āĨ¤ ?. āĻāĻā§ āĻŦāĻžāĻ āĻĒāĻžāĻļāĻāĻž āĻĻā§āĻā§ āύā§āϝāĻŧ, āĻāϰ āĻĨāĻžāĻŽāĻžāϰ āĻŦāĻĻāϞ⧠āĻĻā§āϝāĻŧ undefinedāĨ¤
āϝā§āĻāĻžāϝāĻŧ āĻā§āĻ āϰāĻžāĻāĻŦā§: ?. āύāĻž-āĻĨāĻžāĻāĻž value-āĻā§ āĻŦāĻžāύāĻŋāϝāĻŧā§ āĻĻā§āϝāĻŧ undefined, āϤāĻžāĻ āĻāϏāϞ āĻāĻāĻāĻž default āĻĒā§āϤ⧠āĻāϰ āϏāĻžāĻĨā§ ?? āĻā§āĻĄāĻŧā§ āĻĻāĻžāĻ, āĻļā§āώ āϞāĻžāĻāύ⧠āϝā§āĻŽāύāĨ¤ āĻŦāĻžāĻāĻŋāĻāĻž āĻāύāĻŦā§ Module 8āĨ¤
Ternary: condition ? a : b
Conditional operator
condition ? valueIfTruthy : valueIfFalsy
condition-āĻā§ truthy āĻŦāĻž falsy āĻšāĻŋāϏā§āĻŦā§ āĻĒāĻĄāĻŧāĻž āĻšāϝāĻŧ; āĻĻā§āĻāĻāĻž value-āϰ āĻŽāϧā§āϝ⧠āĻšāĻŋāϏāĻžāĻŦ āĻšāϝāĻŧ āĻļā§āϧ⧠āĻāĻāĻāĻžāϰāĨ¤
const marks = 72;
console.log(marks >= 40 ? "pass" : "fail");
const n = 7;
console.log(n % 2 === 0 ? "even" : "odd");
pass
odd
āĻāĻāĻžāĻ āĻāĻāĻŽāĻžāϤā§āϰ operator āϝāĻžāϰ operand āϤāĻŋāύāĻāĻž, āϤāĻžāĻ āύāĻžāĻŽ ternaryāĨ¤ if-āĻāϰ āĻŽāϤ⧠āύāĻž (Module 4), āĻāĻāĻž āĻāĻāĻāĻž expression: āĻāĻŽāύ āĻāĻāĻāĻž value āĻĻā§āϝāĻŧ, āϝā§āĻāĻž āϰāĻžāĻāϤ⧠āĻĒāĻžāϰā§, print āĻāϰāϤ⧠āĻĒāĻžāϰā§, āĻŦāĻž out-āĻ push āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
āϝā§āĻāĻžāϝāĻŧ āĻā§āĻ āϰāĻžāĻāĻŦā§: āĻāĻāĻāĻž ternary āĻĒāĻĄāĻŧāϤ⧠āĻāϰāĻžāĻŽ, āĻāĻŋāύā§āϤ⧠ternary-āϰ āĻāĻŋāϤāϰ⧠ternary āĻā§āĻŦ āϤāĻžāĻĄāĻŧāĻžāϤāĻžāĻĄāĻŧāĻŋ āĻāĻ āĻĒāĻžāĻāĻžāϝāĻŧāĨ¤ āĻŽāĻžāĻā§āϰ āĻĢāϞāĻāĻžāĻā§ const āĻĻāĻŋāϝāĻŧā§ āĻāĻāĻāĻž āύāĻžāĻŽ āĻĻāĻžāĻ, āĻ
āĻĨāĻŦāĻž parentheses āĻŦāϏāĻžāĻāĨ¤
Assignment: = āϰā§āĻā§ āĻĻā§āϝāĻŧ, āĻĒā§āϰāĻļā§āύ āĻāϰ⧠āύāĻž
Assignment
name = value value-āĻā§ name-āĻ āϰāĻžāĻā§, āĻāϰ āĻĒā§āϰ⧠expression-āĻāĻž āĻĻā§āϝāĻŧ value
āĻāĻ āϝ⧠Maria-āϰ program, āϏāϤā§āϝāĻŋ āϏāϤā§āϝāĻŋ āĻāĻžāϞāĻžāύā§āĨ¤
let x = 3;
if (x = 5) {
console.log("x is five, and now x is", x);
}
x is five, and now x is 5
=-āĻ āĻāĻāĻāĻž operatorāĨ¤ āĻāĻāĻž āĻĄāĻžāύ āĻĒāĻžāĻļāĻāĻž āĻŦāĻžāĻ āĻĒāĻžāĻļā§āϰ āύāĻžāĻŽā§ āϰāĻžāĻā§, āĻāϰ āĻĒā§āϰ⧠expression-āĻāĻž āĻĻā§āϝāĻŧ āϰāĻžāĻāĻž value-āĻāĻžāĨ¤ āϤāĻžāĻ if (x = 5) āĻāĻā§ x-āĻ 5 āϰāĻžāĻā§, āϤāĻžāϰāĻĒāϰ āĻāĻŋāĻā§āĻā§āϏ āĻāϰ⧠5 truthy āĻāĻŋ āύāĻžāĨ¤ 5 truthy, āϤāĻžāĻ message āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰāĻ print āĻšāϝāĻŧ, āĻāϰ x āϤāĻžāϰ 3 āĻšāĻžāϰāĻŋāϝāĻŧā§ āĻĢā§āϞā§āĨ¤
Maria āĻŦā§āĻāĻžāϤ⧠āĻā§āϝāĻŧā§āĻāĻŋāϞ if (x === 5): === āĻĒā§āϰāĻļā§āύ āĻāϰā§, = āĻšā§āĻā§āĻŽ āĻĻā§āϝāĻŧāĨ¤ Assignment āĻā§āĻ āĻŦāĻžāĻāϧ⧠āĻĄāĻžāύ āĻĨā§āĻā§ āĻŦāĻžāĻāϝāĻŧā§, āϤāĻžāĻ a = b = 0 āĻāĻā§ b āĻŦāϏāĻžāϝāĻŧ, āϤāĻžāϰāĻĒāϰ aāĨ¤ āϝā§āĻāĻžāϝāĻŧ āĻā§āĻ āϰāĻžāĻāĻŦā§: āĻāĻāĻž valid JavaScript, āϤāĻžāĻ engine āĻāĻāύ⧠āĻāĻĒāϤā§āϤāĻŋ āĻāϰ⧠āύāĻž; āĻāĻĒāϤā§āϤāĻŋ āĻāϰ⧠linter ("āĻāĻāĻž āĻā§āĻĨāĻžāϝāĻŧ āĻāĻžāĻā§ āϞāĻžāĻā§" āĻĻā§āĻā§)āĨ¤
Compound āĻāϰ logical assignment: += āĻĨā§āĻā§ ??=
Compound assignment
x += y x -= y x *= y x /= y x %= y x **= y
x &&= y x ||= y x ??= y
x += yāĻšāϞā§x = x + y-āĻāϰ āĻā§āĻ āϰā§āĻĒ, āĻāϰ āĻŦāĻžāĻāĻŋ āĻĒāĻžāĻāĻāĻāĻž āĻāĻŖāĻŋāϤā§āϰ āϰā§āĻĒā§āĻ āĻāĻāĻ āύāĻŋāϝāĻŧāĻŽāĨ¤x ||= yāĻŦāϏāĻžāϝāĻŧ āĻļā§āϧā§xfalsy āĻšāϞā§,x &&= yāĻļā§āϧ⧠truthy āĻšāϞā§, āĻāϰx ??= yāĻļā§āϧ⧠null āĻŦāĻž undefined āĻšāϞā§āĨ¤
let price = 200;
price -= 20;
price *= 2;
let title = "";
title ||= "Untitled";
let pages = null;
pages ??= 1;
console.log(price, title, pages);
360 Untitled 1
200 āĻĨā§āĻā§ 20 āĻŦāĻžāĻĻ āĻĻāĻŋāϞ⧠180, āϤāĻžāϰ āĻĻā§āĻŦāĻŋāĻā§āĻŖ 360āĨ¤ title āĻāĻžāϞāĻŋ āĻāĻŋāϞ, āϤāĻžāĻ ||= āϏā§āĻāĻž āĻāϰ⧠āĻĻāĻŋāϝāĻŧā§āĻā§; pages āĻāĻŋāϞ null, āϤāĻžāĻ ??= āĻāϰā§āĻā§āĨ¤ Logical āϤāĻŋāύāĻāĻž āϰā§āĻĒ language-āĻ āĻāϏā§āĻā§ ES2021-āĻ, āĻāϰ Node 22 āĻāĻā§āϞ⧠āĻāĻžāϞāĻžāϝāĻŧāĨ¤
āϝā§āĻāĻžāϝāĻŧ āĻā§āĻ āϰāĻžāĻāĻŦā§: += āĻŽāĻžāύā§āĻ +-āĻāϰ āύāĻŋāϝāĻŧāĻŽ, āϤāĻžāĻ string-āĻāϰ āĻāĻĒāϰ āĻāĻāĻž text āĻā§āĻĄāĻŧā§āĨ¤ let line = "a"; line += 1; āĻļā§āώ⧠āϰā§āĻā§ āϝāĻžāϝāĻŧ "a1"āĨ¤
āĻŦāĻžāĻāĻŋāϰāĻž: comma, void, typeof, instanceof āĻāϰ bitwise āĻĒāϰāĻŋāĻŦāĻžāϰ
āĻŦāĻžāĻāĻŋāϰāĻž
(a, b) comma: a-āϰ āĻšāĻŋāϏāĻžāĻŦ āĻāϰā§, āĻĢā§āϞ⧠āĻĻā§āϝāĻŧ, āĻĻā§āϝāĻŧ b
void x undefined āĻĻā§āϝāĻŧ
typeof x type-āĻāϰ āύāĻžāĻŽāĻāĻž string āĻšāĻŋāϏā§āĻŦā§ āĻĻā§āϝāĻŧ
x instanceof Type āĻāĻŋāĻā§āĻā§āϏ āĻāϰā§, x-āĻā§ Type āĻŦāĻžāύāĻŋāϝāĻŧā§āĻā§ āĻāĻŋ āύāĻž
& | ^ ~ << >> >>> bitwise: āĻļā§āϧ⧠āύāĻžāĻŽ, āĻāĻāĻžāύ⧠āĻļā§āĻāĻžāύ⧠āĻšāĻŦā§ āύāĻž
console.log((1, 2), void 0);
console.log(typeof 42, typeof "42", typeof null);
console.log([] instanceof Array, typeof []);
2 undefined
number string object
true object
Comma-āϰ āĻĻā§āĻāĻž āĻĒāĻžāĻŦā§ āĻĻā§āĻāĻāĻž counter-āĻāϝāĻŧāĻžāϞāĻž for header-āĻ, āĻāϰ void 0-āĻāϰ āĻĻā§āĻāĻž āĻĒāĻžāĻŦā§ āĻā§āύ⧠tool-āĻāϰ āĻŦāĻžāύāĻžāύ⧠code-āĻ; āύāĻŋāĻā§ āĻā§āύā§āĻāĻžāĻ āϞāĻŋāĻāϤ⧠āĻšāĻŦā§ āύāĻžāĨ¤ typeof āĻšāϞ⧠Module 1-āĻāϰ operator, āϤāĻžāĻ parentheses āϞāĻžāĻā§ āύāĻžāĨ¤ typeof āϝā§āĻāĻžāύ⧠āĻļā§āϧ⧠"object" āĻŦāϞā§, instanceof āϏā§āĻāĻžāύ⧠āĻŦāϞ⧠āĻĻā§āϝāĻŧ [] āĻāĻāĻāĻž array (Module 7); āĻā§āĻāĻžāĻŦā§ āĻāĻžāύā§, āϏā§āĻāĻž āĻŦāϞāĻŦā§ Module 9āĨ¤
Bitwise operator āĻāĻžāĻ āĻāϰ⧠āĻāĻāĻāĻž number-āĻāϰ 32-bit āĻĒā§āϰā§āĻŖāϏāĻāĻā§āϝāĻž āϰā§āĻĒā§āϰ āĻāĻĒāϰ, flag āĻāϰ hash-āĻāϰ āĻāύā§āϝāĨ¤ MDN-āĻāϰ "Expressions and operators" page-āĻ āĻāĻĻā§āϰ āϤāĻžāϞāĻŋāĻāĻž āĻāĻā§, āĻāϰ āĻāĻ track āĻāĻā§āϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻļā§āϧ⧠āϝā§āĻāĻžāύ⧠āĻā§āύ⧠problem-āĻ āϞāĻžāĻā§āĨ¤ in, delete, new, ... āĻāϰ await āĻāϏāĻŦā§ āύāĻŋāĻ āύāĻŋāĻ āĻŦāĻŋāώāϝāĻŧā§āϰ āϏāĻžāĻĨā§, Module 7, 8, 9 āĻāϰ 13-āĻāĨ¤
Precedence: āĻā§āύ operator āĻāĻā§
āĻāĻāĻāĻž expression-āĻ āĻāϝāĻŧā§āĻāĻāĻž operator āĻĨāĻžāĻāϞ⧠āĻā§āύāĻāĻž āĻāĻā§ āĻāϞāĻŦā§, āϏā§āĻāĻž āĻ āĻŋāĻ āĻāϰ⧠precedence, āϝā§āĻŽāύ āϏā§āĻā§āϞā§āϰ āĻ
āĻā§āĻā§ āϝā§āĻā§āϰ āĻāĻā§ āĻā§āĻŖāĨ¤ āĻāĻāĻ āϏāĻžāϰāĻŋāϰ āĻĻā§āĻāĻāĻž operator-āĻāϰ āĻŽāϧā§āϝ⧠āĻāĻžāĻ āĻāĻžāĻā§ associativity: āĻŦā§āĻļāĻŋāϰāĻāĻžāĻā§āϰ āĻŦā§āϞāĻžāϝāĻŧ āĻŦāĻžāĻ āĻĨā§āĻā§ āĻĄāĻžāύā§, āĻāϰ **, ternary āĻāϰ assignment-āĻāϰ āĻŦā§āϞāĻžāϝāĻŧ āĻĄāĻžāύ āĻĨā§āĻā§ āĻŦāĻžāĻāϝāĻŧā§āĨ¤ āύāĻŋāĻā§ āĻāĻ lesson-āĻāϰ āĻĒā§āϰāϤāĻŋāĻāĻž operator, āĻĒā§āϰāĻĨāĻŽ āĻĨā§āĻā§ āĻļā§āώ āĻĒāϰā§āϝāύā§āϤāĨ¤
| āĻā§āϰāĻŽ | Operator | āĻā§āĻ āĻŦāĻžāĻāϧ⧠| āĻāĻĻāĻžāĻšāϰāĻŖ, āĻā§āĻ āĻĻā§āĻāĻŋāϝāĻŧā§ |
|---|---|---|---|
| 1 | ( ) | āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻŋāϤāϰā§āϰāĻāĻž āĻāĻā§ | (1 + 2) * 3 āĻšāϞ⧠9 |
| 2 | . ?. [ ] āĻāϰ call f() | āĻŦāĻžāĻ āĻĨā§āĻā§ āĻĄāĻžāύ⧠| user?.name |
| 3 | x++ x-- | āĻāĻāĻāĻžāĻ operand | a++ * 2 āĻŽāĻžāύ⧠(a++) * 2 |
| 4 | ! +x -x ++x --x typeof void | āĻĄāĻžāύ āĻĨā§āĻā§ āĻŦāĻžāĻāϝāĻŧā§ | !a && b āĻŽāĻžāύ⧠(!a) && b |
| 5 | ** | āĻĄāĻžāύ āĻĨā§āĻā§ āĻŦāĻžāĻāϝāĻŧā§ | 2 ** 3 ** 2 āĻŽāĻžāύ⧠2 ** (3 ** 2) |
| 6 | * / % | āĻŦāĻžāĻ āĻĨā§āĻā§ āĻĄāĻžāύ⧠| 10 / 2 * 5 āĻšāϞ⧠25 |
| 7 | + - | āĻŦāĻžāĻ āĻĨā§āĻā§ āĻĄāĻžāύ⧠| 1 + 2 * 3 āĻšāϞ⧠7 |
| 8 | < > <= >= instanceof | āĻŦāĻžāĻ āĻĨā§āĻā§ āĻĄāĻžāύ⧠| 3 > 2 > 1 āĻŽāĻžāύ⧠(3 > 2) > 1 |
| 9 | === !== == != | āĻŦāĻžāĻ āĻĨā§āĻā§ āĻĄāĻžāύ⧠| 1 + 1 === 2 āĻšāϞ⧠true |
| 10 | && | āĻŦāĻžāĻ āĻĨā§āĻā§ āĻĄāĻžāύ⧠| a || b && c āĻŽāĻžāύ⧠a || (b && c) |
| 11 | || ?? | āĻŦāĻžāĻ āĻĨā§āĻā§ āĻĄāĻžāύ⧠| parentheses āύāĻž āĻĻāĻŋāϞ⧠?? āĻāĻāύ⧠|| āĻŦāĻž &&-āĻāϰ āϏāĻžāĻĨā§ āĻŽā§āĻļā§ āύāĻž |
| 12 | ? : āĻāϰ āϏāĻŦ assignment, = āĻĨā§āĻā§ ??= | āĻĄāĻžāύ āĻĨā§āĻā§ āĻŦāĻžāĻāϝāĻŧā§ | a = b = 0 āĻŽāĻžāύ⧠a = (b = 0) |
| 13 | , | āĻŦāĻžāĻ āĻĨā§āĻā§ āĻĄāĻžāύ⧠| āϏāĻŦāϏāĻŽāϝāĻŧ āϏāĻŦāĻžāϰ āĻļā§āώ⧠|
MDN-āĻāϰ āĻĒā§āϰ⧠table-āĻ bitwise operator-āĻā§āϞā§āϰ āĻāĻžāϝāĻŧāĻāĻžāĻ āĻĻā§āĻāϝāĻŧāĻž āĻāĻā§āĨ¤ āĻāĻŦāĻžāϰ āĻĻā§āĻā§, āĻāĻ table āĻāĻāĻāĻž āϞāĻžāĻāύā§āϰ āĻāĻĒāϰ āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§āĨ¤
āϞāĻžāĻāύāĻāĻž āύāĻŋāĻā§ āĻāĻžāϞāĻŋāϝāĻŧā§ āĻĻā§āĻā§, āϧāĻžāĻĒāĻā§āϞ⧠āϝ⧠āĻāϤā§āϤāϰ āĻĻā§āϝāĻŧ, āĻ āĻŋāĻ āϏā§āĻāĻžāĻ āĻĒāĻžāĻŦā§āĨ¤
console.log(1 + 2 * 3 > 6 && "yes");
console.log(((1 + (2 * 3)) > 6) && "yes");
yes
yes
āϝā§āĻāĻž āύāĻŋāϝāĻŧā§ āύāĻŋāĻļā§āĻāĻŋāϤ āύāĻž, āϤāĻžāϰ āĻāύā§āϝ āύāĻŋāϝāĻŧāĻŽāĻāĻž āϏā§āĻāĻž: āϏāύā§āĻĻā§āĻš āĻšāϞ⧠parentheses āĻŦāϏāĻžāĻāĨ¤ āĻāϰāĻ āĻāĻŋāĻā§āĻ āύāĻž, āĻāϰ āĻĒāϰā§āϰ āĻĒāĻžāĻ āĻāĻā§ āĻāĻ table āĻā§āϞ⧠āĻŦāϏāϤ⧠āĻšāϝāĻŧ āύāĻžāĨ¤
Operator āϝāĻāύ āĻŽāĻžāύāĻž āĻāϰā§: āϤāĻŋāύāĻāĻž TypeError
āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ operator āϝāĻž āĻĒāĻžāϝāĻŧ, āϤāĻžāĻā§āĻ convert āĻāϰ⧠āύā§āϝāĻŧāĨ¤ āϤāĻŦā§ āϤāĻŋāύāĻāĻž conversion-āĻ āϏ⧠āϰāĻžāĻāĻŋ āĻšāϝāĻŧ āύāĻž, āĻāϰ program āĻĨā§āĻŽā§ āϝāĻžāϝāĻŧ āĻāĻāĻāĻž TypeError āĻĻāĻŋāϝāĻŧā§āĨ¤ Playground-āĻāϰ verdict āĻāϏ⧠Runtime error, āĻāϰ āĻĨāĻžāĻŽāĻžāϰ āĻāĻā§ āϝāĻž print āĻšāϝāĻŧā§āĻāĻŋāϞ, āϏā§āĻāĻž āĻĨā§āĻā§ āϝāĻžāϝāĻŧāĨ¤
1. Number-āĻāϰ āϏāĻžāĻĨā§ bigint āĻŽā§āĻļāĻžāύā§āĨ¤ āύāĻŋāϰāĻžāĻĒāĻĻ āϏā§āĻŽāĻžāϰ āĻŦāĻžāĻāϰā§āϰ āĻĒā§āϰā§āĻŖāϏāĻāĻā§āϝāĻžāϰ āĻāύā§āϝ n suffix-āĻāϰ āĻāĻĨāĻž Module 1-āĻ āĻāϏā§āĻāĻŋāϞāĨ¤
const big = 10n;
console.log(big + 5n);
console.log(big + 5);
15n
TypeError: Cannot mix BigInt and other types, use explicit conversions
Bigint āĻāĻāύ⧠āĻā§āĻĒāĻāĻžāĻĒ number āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ āύāĻž, number-āĻ āĻā§āĻĒāĻāĻžāĻĒ bigint āĻšāϝāĻŧ āύāĻž, āĻāĻžāϰāĻŖ āϝā§āĻā§āύ⧠āĻĻāĻŋāĻā§āĻ āĻ
āĻā§āĻ āĻšāĻžāϰāĻŋāϝāĻŧā§ āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻā§āĻā§ āĻāϰ⧠convert āĻāϰā§: big + BigInt(5) āĻĻā§āϝāĻŧ 15nāĨ¤ āϤā§āϞāύāĻž āĻ
āĻŦāĻļā§āϝ āĻāϞā§: 10n > 5 āĻšāϞ⧠trueāĨ¤
2. Text-āĻāϰ āϏāĻžāĻĨā§ symbol āĻā§āĻĄāĻŧāĻžāĨ¤ Symbol āĻšāϞ⧠Module 1-āĻāϰ āϏā§āĻ āĻāĻŽ āĻĻā§āĻāĻž primitive, āĻāĻāĻāĻž āĻ āύāύā§āϝ āϞā§āĻŦā§āϞāĨ¤
const id = Symbol("id");
console.log(typeof id);
console.log("id: " + id);
symbol
TypeError: Cannot convert a Symbol value to a string
+ āĻāĻŋāĻā§āĻā§āϏ āύāĻž āĻāϰā§āĻ symbol-āĻāĻžāĻā§ text āĻŦāĻžāύāĻŋāϝāĻŧā§ āĻĢā§āϞāϤ, āĻāϰ symbol āϏā§āĻāĻž āĻšāϤ⧠āĻĻā§āϝāĻŧ āύāĻžāĨ¤ āϤāĻžāĻ āĻŽā§āĻ āĻĢā§āĻā§ āĻāĻžāĻ: String(id) āĻĻā§āϝāĻŧ "Symbol(id)"āĨ¤
3. āĻāĻŽāύ object, āϝāĻžāϰ primitive āĻšāĻāϝāĻŧāĻžāϰ āĻā§āύ⧠āĻāĻĒāĻžāϝāĻŧ āύā§āĻāĨ¤ Primitive āĻšāϞ⧠Module 1-āĻāϰ āϏāĻžāϤāĻāĻž āϏāϰāϞ type-āĻāϰ āϝā§āĻā§āύā§āĻāĻžāĨ¤ Node-āĻāϰ built-in querystring module āĻāĻāĻāĻž web address-āĻāϰ ?-āĻāϰ āĻĒāϰā§āϰ āϞā§āĻāĻžāĻāĻžāĻā§ āĻāĻāĻāĻž object āĻŦāĻžāύāĻŋāϝāĻŧā§ āĻĻā§āϝāĻŧāĨ¤
const qs = require("querystring");
const form = qs.parse("name=Zara&age=14");
console.log(form.name, form.age);
console.log("form: " + form);
Zara 14
TypeError: Cannot convert object to primitive value
āĻāĻāĻāĻž object-āĻā§ text-āĻāϰ āϏāĻžāĻĨā§ āĻā§āĻĄāĻŧāϤ⧠āĻā§āϞ⧠engine object-āĻāĻžāϰ āĻāĻžāĻā§ āϤāĻžāϰ text āϰā§āĻĒāĻāĻž āĻāĻžāϝāĻŧ, āĻāĻŽāύ āĻāĻŋāĻā§ method āĻĻāĻŋāϝāĻŧā§, āϝā§āĻā§āϞ⧠āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ object āĻāϤā§āϤāϰāĻžāϧāĻŋāĻāĻžāϰ⧠āĻĒāĻžāϝāĻŧ (Module 9)āĨ¤ āĻāĻ object āϏā§āĻā§āϞā§āϰ āĻā§āύā§āĻāĻžāĻ āĻĒāĻžāϝāĻŧāύāĻŋ, āϤāĻžāĻ āĻāĻžāĻāϝāĻŧāĻžāϰ āĻŽāϤ⧠āĻāĻŋāĻā§ āύā§āĻāĨ¤ āĻāϰ āĻ
āĻāĻļāĻā§āϞ⧠print āĻāϰā§, āĻ
āĻĨāĻŦāĻž āĻāϞāĻžāĻĻāĻž argument āĻšāĻŋāϏā§āĻŦā§ āĻĻāĻžāĻ: console.log("form:", form) print āĻāϰ⧠form: [Object: null prototype] { name: 'Zara', age: '14' }āĨ¤
āϤāĻžāĻšāϞ⧠operator āĻā§āĻĒāĻāĻžāĻĒ convert āĻāϰā§, āĻļā§āϧ⧠āĻāĻ āϤāĻŋāύ āĻāĻžāϝāĻŧāĻāĻž āĻāĻžāĻĄāĻŧāĻž, āĻāϰ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āĻšāϞ⧠āύāĻŋāĻā§ āĻāĻā§āĻā§ āĻāϰ⧠convert āĻāϰāĻž, āϝā§āĻāĻž lesson 03-āĻāϰ āĻŦāĻŋāώāϝāĻŧāĨ¤
āϤāĻŋāύ āĻŦāύā§āϧ⧠1000 āĻāĻžāĻāĻžāϰ āĻāĻāĻāĻž āĻŦāĻŋāϞ āĻāĻžāĻ āĻāϰ⧠āĻĻā§āĻŦā§āĨ¤ āĻĒā§āϰāϤā§āϝā§āĻā§ āĻĻā§āϝāĻŧ āĻĒā§āϰā§āĻŖ āĻāĻžāĻāĻžāϝāĻŧ, āĻāϰ āϝāĻž āĻŦāĻžāĻĄāĻŧāϤāĻŋ āĻĨāĻžāĻā§ āϏā§āĻāĻž āϝāĻžāϝāĻŧ tip-āĻāϰ āĻŦāĻžāĻā§āϏā§āĨ¤
const bill = 1000;
const friends = 3;
const share = Math.floor(bill / friends);
const left = bill % friends;
console.log("each pays", share);
console.log("left over", left);
console.log("check:", share * friends + left === bill);
each pays 333
left over 1
check: true
Math.floor āύāĻŋāĻā§āϰ āĻĻāĻŋāĻā§ round āĻāϰā§, Module 1-āĻāϰ teaser-āĻ āϝā§āĻŽāύ āĻĻā§āĻā§āĻāĨ¤ āĻļā§āώ āϞāĻžāĻāύ⧠parentheses āϞāĻžāĻā§ āύāĻž: āĻāĻā§ *, āϤāĻžāϰāĻĒāϰ +, āϤāĻžāϰāĻĒāϰ ===, āĻŽāĻžāύ⧠table-āĻāϰ 6, 7 āĻāϰ 9 āύāĻŽā§āĻŦāϰ āϏāĻžāϰāĻŋāĨ¤
David-āĻāϰ game āĻāĻāĻāύ player-āĻāϰ point, level, streak āĻāϰ badge āϰāĻžāĻā§āĨ¤ āĻāĻāĻāĻž quest āĻļā§āώ āĻšāϞ⧠āĻāĻžāϰāĻāĻžāĻ āĻŦāĻĻāϞāĻžāϝāĻŧ, āĻĒā§āϰāϤāĻŋāĻāĻž āĻāϞāĻžāĻĻāĻž operator āĻĻāĻŋāϝāĻŧā§āĨ¤
let xp = 180;
let level = 3;
let streak = 0;
let badge = "";
xp += 45;
streak++;
level += xp >= 200 ? 1 : 0;
badge ||= "first steps";
console.log("xp", xp, "level", level, "streak", streak);
console.log("badge:", badge);
console.log(level > 3 && streak >= 1 ? "level up!" : "keep going");
xp 225 level 4 streak 1
badge: first steps
level up!
level += xp >= 200 ? 1 : 0-āĻ āĻāĻā§ āϤā§āϞāύāĻžāĻāĻž āĻāϞā§, āϤāĻžāϰāĻĒāϰ ternary āĻŦā§āĻā§ āύā§āϝāĻŧ 1, āϤāĻžāϰāĻĒāϰ += āϏā§āĻāĻž āϝā§āĻ āĻāϰā§āĨ¤ āĻļā§āώ āϞāĻžāĻāύāĻ āĻāĻāĻāĻāĻžāĻŦā§ āĻāϞā§: āĻĻā§āĻāĻāĻž āϤā§āϞāύāĻž, āϤāĻžāϰāĻĒāϰ &&, āϤāĻžāϰāĻĒāϰ ternaryāĨ¤ xp āĻŦāĻĻāϞ⧠100 āĻāϰ⧠āĻāĻŦāĻžāϰ āĻāĻžāϞāĻžāĻ: level āĻĨāĻžāĻāĻŦā§ 3, āĻāϰ message āĻŦāĻĻāϞ⧠āϝāĻžāĻŦā§āĨ¤
Zara-āϰ āĻĻā§āĻāĻžāύā§āϰ program āĻĒāĻĄāĻŧā§ āĻāϝāĻŧāĻāĻž item, āϤāĻžāĻĻā§āϰ āĻĻāĻžāĻŽ, āϤāĻžāϰāĻĒāϰ āĻāĻžāĻāϞ⧠āĻāĻāĻāĻž coupon āĻļāĻŦā§āĻĻāĨ¤ 1000 āĻāĻžāĻāĻž āĻŦāĻž āϤāĻžāϰ āĻŦā§āĻļāĻŋ order-āĻ 10% āĻāĻžāĻĄāĻŧāĨ¤ Delivery-āϰ āĻāϰāĻ 60, āϤāĻŦā§ āĻāĻžāĻĄāĻŧā§āϰ āĻĒāϰ⧠order 500 āĻŦāĻž āϤāĻžāϰ āĻŦā§āĻļāĻŋ āĻšāϞā§, āĻ
āĻĨāĻŦāĻž coupon FREESHIP āĻšāϞā§, delivery freeāĨ¤
const input = require("fs").readFileSync(0, "utf8");
const tokens = input.split(/\s+/).filter(Boolean);
let at = 0;
const next = () => tokens[at++];
const nextInt = () => Number(next());
const out = [];
const n = nextInt();
let total = 0;
for (let i = 0; i < n; i++) {
total += nextInt();
}
const coupon = next() ?? "none";
const discount = total >= 1000 ? total / 10 : 0;
const delivery = total - discount >= 500 || coupon === "FREESHIP" ? 0 : 60;
out.push("total: " + total);
out.push("discount: " + discount);
out.push("coupon: " + coupon);
out.push("delivery: " + delivery);
out.push("to pay: " + (total - discount + delivery));
console.log(out.join("\n"));
total: 1150
discount: 115
coupon: none
delivery: 0
to pay: 1035
āĻāĻ output-āĻāĻž input 3 450 300 400-āĻāϰ āĻāύā§āϝ, āĻā§āύ⧠coupon āύā§āĻāĨ¤ for loop-āĻāĻž Module 1-āĻāϰ (lesson 05); āĻ āĻŋāĻāĻŽāϤ⧠āĻļā§āĻāĻžāĻŦā§ Module 4āĨ¤ Input āĻļā§āώ āĻšāϝāĻŧā§ āĻā§āϞ⧠next() āĻĻā§āϝāĻŧ undefined, āĻāϰ ?? āϏā§āĻāĻžāĻā§ āĻŦāĻžāύāĻžāϝāĻŧ "none"āĨ¤
delivery-āϰ āϞāĻžāĻāύāĻāĻž table āĻŽāĻŋāϞāĻŋāϝāĻŧā§ āĻĒāĻĄāĻŧā§: āĻŦāĻŋāϝāĻŧā§āĻ, āĻĻā§āĻāĻāĻž āϤā§āϞāύāĻž, ||, āϤāĻžāϰāĻĒāϰ ternaryāĨ¤ Input 2 200 150 FREESHIP āĻĻāĻŋāϞ⧠āĻāϏ⧠delivery: 0 āĻāϰ to pay: 350āĨ¤ āĻļā§āώ push-āĻāϰ parentheses āύāĻž āĻĨāĻžāĻāϞ⧠+ āĻāĻā§āĻ text āĻā§āĻĄāĻŧā§ āĻĢā§āϞāϤ, āĻāϰ āϤāĻāύ āĻŦāĻŋāϝāĻŧā§āĻāĻāĻž āĻĻāĻŋāϤ NaNāĨ¤
āĻāĻāĻž āĻā§āĻĨāĻžāϝāĻŧ āĻāĻžāĻā§ āϞāĻžāĻā§
- Next.js configurationāĨ¤ Next.js documentation-āĻāϰ
assetPrefixpage āĻĒā§āϰāĻĨāĻŽā§phase === PHASE_DEVELOPMENT_SERVERāĻĻāĻŋāϝāĻŧā§isDevāĻŦāϏāĻžāϝāĻŧ, āϤāĻžāϰāĻĒāϰ āϞā§āĻā§assetPrefix: isDev ? undefined : 'https://cdn.mydomain.com'āĨ¤ āĻāĻāĻāĻž strict equality āĻāϰ āĻāĻāĻāĻž ternary āĻŽāĻŋāϞ⧠āĻāĻāĻāĻž setting āĻŦā§āĻā§ āύāĻŋāĻā§āĻā§āĨ¤ - TypeScriptāĨ¤ āĻĒā§āϰāύ⧠JavaScript (target ES2019) āĻŦāĻžāύāĻžāϤ⧠āĻŦāϞāϞ⧠TypeScript 5.9
config?.server?.port ?? 3000-āĻā§ āύāϤā§āύ āĻāϰ⧠āϞā§āĻā§=== null,=== void 0āĻāϰ? :āĻĻāĻŋāϝāĻŧā§āĨ¤void 0-āĻāϰ āĻĻā§āĻāĻž āϤā§āĻŽāĻŋ āĻāĻāĻžāύā§āĻ āĻĒāĻžāĻŦā§, āĻāϰ āĻāĻāĻž āĻšā§āĻŦāĻšā§ āĻĻā§āĻāĻžāϝāĻŧ?.āĻāϰ??āĻ āĻŋāĻ āĻā§ āĻā§ check āĻāϰā§āĨ¤ - ESLintāĨ¤ āĻāϰ
no-cond-assignrule recommended set-āĻ āĻāĻžāϞ⧠āĻĨāĻžāĻā§, āĻāϰif-āĻāϰ condition-āĻāϰ āĻāĻŋāϤāϰ⧠assignment āĻĒā§āϞ⧠āϧāϰāĻŋāϝāĻŧā§ āĻĻā§āϝāĻŧāĨ¤ Maria-āϰif (x = 5)āĻāĻžāϞāĻžāύā§āϰ āĻāĻā§āĻ āĻāĻāĻž āĻĻā§āĻāĻŋāϝāĻŧā§ āĻĻāĻŋāϤāĨ¤
āϝ⧠āĻā§āϞāĻā§āϞ⧠āϏāĻŦāĻžāĻ āĻāϰā§
ā§§. āĻ āĻā§āĻ āĻŦāĻāϝāĻŧā§āϰ āĻŽāϤ⧠āĻāϰ⧠āϞā§āĻāĻž range-āĻāϰ testāĨ¤
const temp = 30;
console.log(10 < temp < 20);
console.log(10 < temp && temp < 20);
true
false
āĻā§āύ⧠message āύā§āĻ, āĻāϰ āĻĒā§āϰāĻĨāĻŽ āĻāϤā§āϤāϰāĻāĻž āĻā§āϞ: 30 āϤ⧠10 āĻāϰ 20-āĻāϰ āĻŽāĻžāĻā§ āύāĻžāĨ¤ 10 < temp āĻĻā§āϝāĻŧ true, āϤāĻžāϰāĻĒāϰ true < 20-āĻ true āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ 1, āĻāϰ 1 āϤ⧠20-āĻāϰ āĻā§āϝāĻŧā§ āĻā§āĻāĨ¤ āĻĻā§āĻāĻāĻž āϤā§āϞāύāĻž && āĻĻāĻŋāϝāĻŧā§ āĻā§āĻĄāĻŧā§, āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āϞāĻžāĻāύ⧠āϝā§āĻŽāύāĨ¤ āϤā§āĻŽāĻŋ āĻĒā§āϰāĻĨāĻŽāĻāĻžāĻ āϞāĻŋāĻāĻŦā§, āĻāĻžāϰāĻŖ āĻ
āĻā§āĻā§ āĻāĻāĻžāĻŦā§āĻ āϞā§āĻā§āĨ¤
⧍. next() āĻĻāĻŋāϝāĻŧā§ āĻĒāĻĄāĻŧāĻž āĻĻā§āĻāĻāĻž token-āĻāϰ āϤā§āϞāύāĻžāĨ¤
const input = require("fs").readFileSync(0, "utf8");
const tokens = input.split(/\s+/).filter(Boolean);
let at = 0;
const next = () => tokens[at++];
const nextInt = () => Number(next());
const out = [];
const oldPrice = next();
const newPrice = next();
out.push(newPrice > oldPrice ? "went up" : "did not go up");
console.log(out.join("\n"));
did not go up
Input 90 150-āĻāϰ āĻāύā§āϝ Bob-āĻāϰ program āĻŦāϞ⧠āĻĻāĻžāĻŽ āĻŦāĻžāĻĄāĻŧā§āύāĻŋāĨ¤ āĻĻā§āĻāĻāĻž token-āĻ string, āϤāĻžāĻ "150" > "90" āϤā§āϞāύāĻž āĻāϰ⧠"1" āĻāϰ "9": falseāĨ¤ nextInt() āĻĻāĻŋāϝāĻŧā§ āĻĒāĻĄāĻŧā§, āϤāĻāύ āĻŦāϞāĻŦā§ went upāĨ¤ āϤā§āĻŽāĻŋ next() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§, āĻāĻžāϰāĻŖ token-āĻā§āϞ⧠āĻĻā§āĻāϤ⧠number-āĻāϰ āĻŽāϤā§āĻāĨ¤
ā§Š. Power-āĻāϰ āĻāĻā§ minus āĻāĻŋāĻšā§āύāĨ¤
console.log(-2 ** 2);
āĻā§āύ⧠āϞāĻžāĻāύ āĻāϞāĻžāϰ āĻāĻā§āĻ program āĻĨā§āĻŽā§ āϝāĻžāϝāĻŧ: SyntaxError: Unary operator used immediately before exponentiation expression. Parenthesis must be used to disambiguate operator precedenceāĨ¤ āĻāϰ āĻŽāĻžāύ⧠4-āĻ āĻšāϤ⧠āĻĒāĻžāϰā§, -4-āĻ āĻšāϤ⧠āĻĒāĻžāϰā§, āϤāĻžāĻ JavaScript āϤā§āĻŽāĻžāĻā§āĻ āĻŦā§āĻā§ āύāĻŋāϤ⧠āĻŦāϞā§: (-2) ** 2 āĻšāϞ⧠4, āĻāϰ -(2 ** 2) āĻšāϞ⧠-4āĨ¤ āϤā§āĻŽāĻŋ āĻāĻāĻž parentheses āĻāĻžāĻĄāĻŧāĻžāĻ āϞāĻŋāĻāĻŦā§, āĻāĻžāϰāĻŖ āĻĻā§āĻāϤ⧠āĻ
āĻā§āĻā§āϰ āĻŽāϤā§āĨ¤
ā§Ē. āĻāĻāĻ expression-āĻ ?? āĻāϰ || āĻŽā§āĻļāĻžāύā§āĨ¤
const typed = "";
const saved = null;
const name = typed || saved ?? "guest";
āĻā§āύ⧠āϞāĻžāĻāύ āĻāϞāĻžāϰ āĻāĻā§āĻ program āĻĨā§āĻŽā§ āϝāĻžāϝāĻŧ: SyntaxError: Unexpected token '??'āĨ¤ āĻĻā§āĻāĻāĻžāϰ āĻā§āύāĻāĻž āĻāĻā§ āĻāĻžāϞāĻžāϤ⧠āĻā§āϝāĻŧā§āĻ, language āϏā§āĻāĻž āĻāύā§āĻĻāĻžāĻ āĻāϰāϤ⧠āϰāĻžāĻāĻŋ āύāĻžāĨ¤ āϝā§āĻāĻž āĻŦā§āĻāĻžāϤ⧠āĻāĻžāĻ, āϏā§āĻ parentheses āĻŦāϏāĻžāĻ: (typed || saved) ?? "guest"āĨ¤ āϤā§āĻŽāĻŋ āĻāĻāĻž āϞāĻŋāĻāĻŦā§, āĻāĻžāϰāĻŖ āĻĻā§āĻāĻāĻžāĻ default āĻŦāϏāĻžāϝāĻŧ, āĻĻā§āĻā§ āĻāĻ āĻĒāϰāĻŋāĻŦāĻžāϰā§āϰ āĻŽāύ⧠āĻšāϝāĻŧāĨ¤
āĻā§āύ⧠expression-āĻāϰ āĻĢāϞ āĻāĻā§ āĻāύā§āĻĻāĻžāĻ āύāĻž āĻāϰ⧠Amara āĻāĻāύ⧠āϏā§āĻāĻž āĻāĻžāϞāĻžāϝāĻŧ āύāĻžāĨ¤ āύāĻŋāĻā§āϰ āĻĻāĻļāĻāĻž āϞāĻžāĻāύā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻžāϰ āĻāύā§āϝ āϤā§āĻŽāĻžāϰ āĻāύā§āĻĻāĻžāĻ āϞāĻŋāĻā§ āĻĢā§āϞā§: value āĻāϤ, āĻāϰ āϤāĻžāϰ type āĻā§āĨ¤ āϤāĻžāϰāĻĒāϰ program āĻāĻžāϞāĻžāĻ, āĻāϰ āĻāύā§āĻĻāĻžāĻāĻā§āϞ⧠āĻŽāĻŋāϞāĻŋāϝāĻŧā§ āĻĻā§āĻā§āĨ¤
Input. āύā§āĻāĨ¤
Output. āĻĻāĻļāĻāĻž āϞāĻžāĻāύ, āĻĒā§āϰāϤāĻŋāĻāĻž expression-āĻāϰ āĻāύā§āϝ āĻāĻāĻāĻžāĨ¤ āϝā§āĻāĻž āĻā§āϞ āĻāύā§āĻĻāĻžāĻ āĻāϰā§āĻāĻŋāϞā§, āϏā§āĻāĻž āĻā§āύ āĻ āĻāĻļā§ āĻŦā§āĻāĻžāύ⧠āĻāĻā§ āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰā§āĨ¤
// Write your ten predictions first, then run.
console.log(7 % 3 + 2 ** 3);
console.log("8" * "2");
console.log("25" < "3");
console.log(10 / 4 > 2 && "big");
console.log(null || 0 || "last");
console.log(false ?? "off");
console.log(!!"false");
console.log(1 + 2 === 3 ? "ok" : "odd");
console.log(typeof (4 > 3));
console.log(2 ** 3 ** 2);
āĻāϞāĻžāĻĻāĻž āĻāϰ⧠grade āĻšāϝāĻŧ āύāĻžāĨ¤ āĻāϏāϞ āĻāĻžāĻāĻāĻž āĻšāϞ⧠āĻāĻžāϞāĻžāύā§āϰ āĻāĻā§āϰ āĻāύā§āĻĻāĻžāĻāĨ¤
Run in CompilerAlice āĻāĻāĻāĻž āϰāĻžāύā§āύāĻžāϰ āĻĒā§āϰāϤāĻŋāϝā§āĻāĻŋāϤāĻžāϰ āĻŦāĻŋāĻāĻžāϰāĻāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž āĻĒāĻĻā§ āϤāĻŋāύāĻāύ āĻŦāĻŋāĻāĻžāϰāĻ āύāĻŽā§āĻŦāϰ āĻĻā§āύ, āĻāϰ āĻĒāĻĻāĻāĻžāϰ āĻĨāĻžāĻā§ āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻžāϞ⧠āύāĻŽā§āĻŦāϰāĻāĻžāĨ¤ āĻĒā§āϰāϤāĻŋ āϤāĻŋāύāĻāĻž āϏāĻāĻā§āϝāĻžāϰ āĻŽāϧā§āϝ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻž print āĻāϰā§āĨ¤ āĻļā§āϧ⧠ternary operator āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§: if āύāĻž, Math.max-āĻ āύāĻžāĨ¤
Input. āĻāĻ āϞāĻžāĻāύ⧠t, āϤāĻžāϰāĻĒāϰ t-āĻāĻž āϞāĻžāĻāύ, āĻĒā§āϰāϤāĻŋāĻāĻžāϝāĻŧ āϤāĻŋāύāĻāĻž āϏāĻāĻā§āϝāĻžāĨ¤
Output. t-āĻāĻž āϞāĻžāĻāύ: āĻĒā§āϰāϤāĻŋ āϤāĻŋāύāĻāĻžāϰ āĻŽāϧā§āϝ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧāĻāĻž, JavaScript āϝā§āĻāĻžāĻŦā§ print āĻāϰā§āĨ¤
Constraints. 1 <= t <= 10000āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž āϏāĻāĻā§āϝāĻžāϝāĻŧ 1 āĻĨā§āĻā§ 20āĻāĻž āĻ āĻā§āώāϰāĨ¤
Sample. Input 3, āϤāĻžāϰāĻĒāϰ 3 9 4, -1.5 -7 -2 āĻāϰ 5 5 5 āĻĻāĻŋāϞ⧠āϤāĻŋāύ āϞāĻžāĻāύ⧠9, -1.5 āĻāϰ 5āĨ¤
const input = require("fs").readFileSync(0, "utf8");
const tokens = input.split(/\s+/).filter(Boolean);
let at = 0;
const next = () => tokens[at++];
const nextInt = () => Number(next());
const out = [];
// your code: read with next() and nextInt(), push every line of output to out
console.log(out.join("\n"));
largest-of-three āύāĻžāĻŽā§ grade āĻšāϝāĻŧāĨ¤ Submit āĻāϰāĻžāϰ āĻāĻā§ āϏāĻŽāĻžāύ āϏāĻāĻā§āϝāĻž, negative āϏāĻāĻā§āϝāĻž āĻāϰ āĻĻāĻļāĻŽāĻŋāĻ āĻĻāĻŋāϝāĻŧā§ āĻāĻžāϞāĻŋāϝāĻŧā§ āĻĻā§āĻā§, āĻāϰ āĻĒāĻĄāĻŧā§ nextInt() āĻĻāĻŋāϝāĻŧā§: token-āĻā§ string āĻšāĻŋāϏā§āĻŦā§ āϤā§āϞāύāĻž āĻāϰāϞ⧠āĻāϤā§āϤāϰ āĻā§āϞ āĻāϏā§āĨ¤
Maria-āϰ sign-up form āĻĒā§āϰāϤāĻŋāĻāĻž field āĻĒāĻžāĻ āĻžāϝāĻŧ āĻāĻ āϞāĻžāĻāύā§āĨ¤ āĻā§āύ⧠field āύāĻž āĻĨāĻžāĻāϞ⧠āĻāϏ⧠null āĻŦāĻž undefined āĻļāĻŦā§āĻĻāĻāĻž; āĻā§āĻ āĻāĻā§āĻā§ āĻāϰ⧠āĻāĻžāϞāĻŋ āϰāĻžāĻāϞ⧠āĻāϏ⧠āĻāĻāĻāĻž āĻāĻžāϞāĻŋ āϞāĻžāĻāύ, āĻāϰ āϏā§āĻāĻž āĻāĻžāϞāĻŋāĻ āĻĨāĻžāĻāĻŦā§āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž field bracket-āĻāϰ āĻāĻŋāϤāϰ⧠print āĻāϰā§, āύāĻž-āĻĨāĻžāĻāĻž field-āĻāϰ āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ defaultāĨ¤
Input. āĻāĻ āϞāĻžāĻāύ⧠n, āϤāĻžāϰāĻĒāϰ n-āĻāĻž āϞāĻžāĻāύāĨ¤ āϝ⧠āϞāĻžāĻāύ āĻšā§āĻŦāĻšā§ null, āϤāĻžāϰ āĻŽāĻžāύ⧠null; āϝ⧠āϞāĻžāĻāύ āĻšā§āĻŦāĻšā§ undefined, āϤāĻžāϰ āĻŽāĻžāύ⧠undefined; āĻŦāĻžāĻāĻŋ āϝā§āĻā§āύ⧠āϞāĻžāĻāύ, āĻāĻžāϞāĻŋ āϞāĻžāĻāύāĻ, āĻšāϞ⧠āϏā§āĻ textāĨ¤
Output. n-āĻāĻž āϞāĻžāĻāύ: āĻĒā§āϰāϤāĻŋāĻāĻž field-āĻāϰ āĻāύā§āϝ [, āϤāĻžāϰāĻĒāϰ value-āĻāĻž, āĻ
āĻĨāĻŦāĻž value null āĻŦāĻž undefined āĻšāϞ⧠default, āϤāĻžāϰāĻĒāϰ ]āĨ¤
Constraints. 1 <= n <= 10000āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž field-āĻāϰ āϞāĻžāĻāύ⧠0 āĻĨā§āĻā§ 60āĻāĻž āĻ āĻā§āώāϰ, āĻāϰ āĻļā§āώ āϞāĻžāĻāύāĻāĻž āĻāĻāύ⧠āĻāĻžāϞāĻŋ āύāĻžāĨ¤
Sample. Input 4, āϤāĻžāϰāĻĒāϰ āϞāĻžāĻāύāĻā§āϞ⧠Zara, null, āĻāĻāĻāĻž āĻāĻžāϞāĻŋ āϞāĻžāĻāύ āĻāϰ undefined āĻĻāĻŋāϞ⧠āĻāĻžāϰ āϞāĻžāĻāύ⧠[Zara], [default], [] āĻāϰ [default]āĨ¤
āϞāĻžāĻāύ āĻāĻžāϞāĻŋ āĻšāϤ⧠āĻĒāĻžāϰā§, āϤāĻžāĻ starter-āĻāĻž lines variant: token-āĻāϰ āĻĻā§āĻāĻāĻž āϞāĻžāĻāύ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ const lines = input.split("\n"); āĻāϰ āĻāĻŽāύ āĻāĻāĻāĻž next(), āϝā§āĻāĻž āĻĒā§āϰ⧠āĻāĻāĻāĻž āϞāĻžāĻāύ āĻĢā§āϰāϤ āĻĻā§āϝāĻŧāĨ¤
const input = require("fs").readFileSync(0, "utf8");
const lines = input.split("\n");
let at = 0;
const next = () => lines[at++];
const nextInt = () => Number(next());
const out = [];
// your code: read with next() and nextInt(), push every line of output to out
console.log(out.join("\n"));
given-or-default āύāĻžāĻŽā§ grade āĻšāϝāĻŧāĨ¤ āĻāĻžāϞāĻŋ āϞāĻžāĻāύ, 0 āϞā§āĻāĻž āϞāĻžāĻāύ, āĻāϰ āĻŦāĻĄāĻŧ āĻšāĻžāϤā§āϰ āĻ
āĻā§āώāϰ⧠NULL āϞā§āĻāĻž āϞāĻžāĻāύ āĻĻāĻŋāϝāĻŧā§ āĻāĻžāϞāĻŋāϝāĻŧā§ āĻĻā§āĻā§; āĻļā§āώā§āϰāĻāĻž text, null āύāĻžāĨ¤
Kenji āĻŦāϞā§, āĻāϰ parentheses āϞāĻžāĻā§ āύāĻž, āĻāĻžāϰāĻŖ table-āĻāĻž āĻāϰ āĻāĻžāύāĻžāĨ¤ āύāĻŋāĻā§ āĻāϰ āϞā§āĻāĻž āĻāϝāĻŧāĻāĻž āϞāĻžāĻāύāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž out.push-āĻāϰ āύāĻŋāĻā§ āĻāϰā§āĻāĻāĻž āϝā§āĻ āĻāϰā§, āĻāĻāĻ expression, āĻāĻŋāύā§āϤ⧠engine āϝā§āĻāĻžāĻŦā§ āĻā§āĻ āĻŦāĻžāĻāϧ⧠āĻ āĻŋāĻ āϏā§āĻāĻžāĻŦā§ āĻĒā§āϰāϤāĻŋāĻāĻž āĻĻāϞ parentheses-āĻ āĻāĻŋāϰā§āĨ¤ āĻāĻžāϞāĻžāĻ: āĻĒā§āϰāϤāĻŋ āĻā§āĻĄāĻŧāĻž āϞāĻžāĻāύ⧠āĻāĻāĻ value print āĻšāϤ⧠āĻšāĻŦā§āĨ¤
const out = [];
const a = 0;
const b = "";
const c = "c";
out.push(1 + 2 * 3 ** 2);
out.push(10 - 4 - 3 ** 0);
out.push(a || b && c);
out.push(!a == b);
out.push(typeof 1 + 1);
out.push("a" + 1 + 2 * 3);
console.log(out.join("\n"));
āĻāϞāĻžāĻĻāĻž āĻāϰ⧠grade āĻšāϝāĻŧ āύāĻžāĨ¤ āĻāϝāĻŧāĻāĻžāϰ āĻĻā§āĻāĻāĻž āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āĻŽāĻžāύā§āώāĻā§ āĻāĻŽāĻā§ āĻĻā§āϝāĻŧāĨ¤ āĻāĻ āĻĻā§āĻāĻāĻžāϰ āĻĒā§āϰāϤāĻŋāĻāĻž āĻāĻ āĻŦāĻžāĻā§āϝ⧠āĻŦā§āĻāĻŋāϝāĻŧā§ āĻŦāϞā§, precedence table-āĻāϰ āĻā§āύ āϏāĻžāϰāĻŋ āĻĻāĻžāϝāĻŧā§ āϤāĻžāϰ āύāĻžāĻŽ āϧāϰā§āĨ¤
Run in CompilerāϏāĻāϰāĻžāĻāϰ āϝ⧠āĻĒā§āϰāĻļā§āύāĻā§āϞ⧠āĻāϏā§
Precedence table-āĻāĻž āĻāĻŋ āĻŽā§āĻāϏā§āĻĨ āĻāϰāϤ⧠āĻšāĻŦā§?
āύāĻžāĨ¤ āĻāĻžāύā§
+-āĻāϰ āĻāĻā§*,&&āĻāϰ||-āĻāϰ āĻāĻā§ āϤā§āϞāύāĻž, āĻāϰ āϏāĻŦāĻžāϰ āĻļā§āώ⧠assignmentāĨ¤ āĻŦāĻžāĻāĻŋ āϏāĻŦāĻāĻŋāĻā§āϰ āĻāĻžāϰāĻĒāĻžāĻļā§ parentheses āĻŦāϏāĻžāĻāĨ¤ āϝ⧠code āĻĒāĻĄāĻŧāϤ⧠table āϞāĻžāĻā§, āϏā§āĻ code-āĻ āĻāϏāϞ⧠parentheses āϞāĻžāĻā§āĨ¤&&āĻāϰ||āϏā§āĻāĻžāϏā§āĻāĻŋ true āĻŦāĻž false āĻĻā§āϝāĻŧ āύāĻž āĻā§āύ?Operand āĻĢā§āϰāϤ āĻĻāĻŋāϞ⧠default āĻŦāϏāĻžāύā§āĻāĻž āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ āĻāĻāĻāĻž āĻā§āĻ expression,
name || "guest"āĨ¤ifāĻŦāĻž ternary-āϰ āĻāĻŋāϤāϰ⧠āĻāĻŋāĻā§āĻ āĻāĻžāĻā§ āύāĻž, āĻāĻžāϰāĻŖ āĻĢāϞāĻāĻžāĻā§ āĻāĻŽāύāĻŋāϤā§āĻ truthy āĻŦāĻž falsy āĻšāĻŋāϏā§āĻŦā§āĻ āĻĒāĻĄāĻŧāĻž āĻšāϝāĻŧāĨ¤ āϏāϤā§āϝāĻŋāĻ boolean āϞāĻžāĻāϞ⧠āϞā§āĻā§Boolean(x)āĻŦāĻž!!xāĨ¤typeofāĻā§āύ operator, function āύāĻž?Operator āĻā§āύ⧠āύāĻžāĻŽ engine āĻā§āĻāĻā§ āĻĻā§āĻāĻžāϰ āĻāĻā§āĻ āϏā§āĻāĻžāϰ āĻĻāĻŋāĻā§ āϤāĻžāĻāĻžāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻāύā§āϝāĻ āĻāĻāύ⧠declare āύāĻž āĻāϰāĻž āύāĻžāĻŽā§āϰ āĻāĻĒāϰ
typeofthrow āύāĻž āĻāϰ⧠āĻĻā§āϝāĻŧ"undefined"(Module 1, lesson 04)āĨ¤typeof(x)-āĻ āĻāϞā§, āĻāĻžāϰāĻŖ āĻāĻāĻžāύ⧠parentheses āĻļā§āϧ⧠āĻā§āĻ āĻŦāĻžāĻāϧā§āĨ¤
āĻŽā§āϞ āĻāĻĨāĻž
- āĻāĻŖāĻŋāϤā§āϰ operator operand-āĻā§ number āĻŦāĻžāύāĻžāϝāĻŧ, āĻļā§āϧ⧠āĻā§āύ⧠āĻĒāĻžāĻļā§ string āĻĨāĻžāĻāϞā§
+āĻāĻžāĻĄāĻŧāĻž;%āĻŦāĻžāĻ operand-āĻāϰ āĻāĻŋāĻšā§āύ āϰāĻžāĻā§, āĻāϰ**āĻā§āĻ āĻŦāĻžāĻāϧ⧠āĻĄāĻžāύ āĻĨā§āĻā§ āĻŦāĻžāĻāϝāĻŧā§āĨ¤ x++āĻĻā§āϝāĻŧ āĻĒā§āϰāύ⧠value,++xāĻĻā§āϝāĻŧ āύāϤā§āύāĻāĻž; āĻāĻāĻž āĻāĻ āϞāĻžāĻāύ⧠āĻĻā§āĻāĻāĻžāĻ āĻāĻāĻ āĻāĻžāĻ āĻāϰā§āĨ¤&&āĻāϰ||āĻāĻāĻāĻž operand āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ, āϤāĻžāĻ||default āĻŦāϏāĻžāϝāĻŧ;??default āĻŦāϏāĻžāϝāĻŧ āĻļā§āϧ⧠null āĻāϰ undefined-āĻāϰ āĻŦā§āϞāĻžāϝāĻŧāĨ¤- āĻĻā§āĻāĻāĻž string āϤā§āϞāύāĻž āĻšāϝāĻŧ text āĻšāĻŋāϏā§āĻŦā§, āϤāĻžāĻ
"10" < "9"; number āϤā§āϞāύāĻž āĻāϰāϤā§Number()āĻĻāĻŋāϝāĻŧā§ convert āĻāϰā§, āĻ āĻĨāĻŦāĻžnextInt()āĻĻāĻŋāϝāĻŧā§ āĻĒāĻĄāĻŧā§āĨ¤ =value āϰāĻžāĻā§ āĻāϰ āϰāĻžāĻāĻž value-āĻāĻžāĻ āĻĻā§āϝāĻŧ, āϤāĻžāĻif (x = 5)āϏāĻŦāϏāĻŽāϝāĻŧ āĻāϞā§; āϤā§āϞāύāĻž āĻāϰā§===āĻĻāĻŋāϝāĻŧā§, āĻāϰ precedence āύāĻŋāϝāĻŧā§ āϏāύā§āĻĻā§āĻš āĻšāϞ⧠parentheses āĻŦāϏāĻžāĻāĨ¤- Number-āĻāϰ āϏāĻžāĻĨā§ bigint āĻŽā§āĻļāĻžāϞā§, text-āĻāϰ āϏāĻžāĻĨā§ symbol āĻā§āĻĄāĻŧāϞā§, āĻāϰ text āϰā§āĻĒ āύā§āĻ āĻāĻŽāύ object āĻā§āĻĄāĻŧāϞ⧠operator āĻāĻāĻāĻž TypeError throw āĻāϰā§āĨ¤
- āĻāϰāĻ āĻāĻā§āϰā§: Interview Pack, output puzzle, āĻĒā§āϰāĻļā§āύ āĻāϰ bug gallery (Pro)āĨ¤
āĻāϰāĻĒāϰ lesson 03 āĻāϝāĻŧāĻāĻž āĻĒā§āϰ⧠program-āĻ āĻāĻā§āĻā§ āĻāϰ⧠convert āĻāϰāĻŦā§, āĻļā§āϰ⧠āĻšāĻŦā§ āĻāĻŽāύ āĻāĻāĻāĻž calculator āĻĻāĻŋāϝāĻŧā§, āϝā§āĻāĻž āĻĻā§āĻāĻāĻž āϏāĻāĻā§āϝāĻž āĻāϰ āĻāĻāĻāĻž operator āĻĒāĻĄāĻŧā§āĨ¤
lesson ⧍ āĻļā§āώ
āĻļā§āώ āĻšāϞ⧠āĻāĻŋāĻšā§āύ āĻĻāĻŋāύ, āĻ āĻā§āϰāĻāϤāĻŋ āĻāĻĒāύāĻžāϰ āϏāĻžāĻĨā§ āĻĨāĻžāĻāĻŦā§āĨ¤
āĻĒāϰā§āϰāĻāĻž: āĻĒā§āϰ⧠program: āĻāĻā§āĻā§ āĻāϰ⧠convert āĻāϰāĻž