Module ā§§ā§Ģ ¡ form, storage āĻāϰ āĻā§āĻ app
Form āĻāϰ storage-āĻāϰ āĻāĻŦāĻŋ: āϝ⧠page āĻŽāύ⧠āϰāĻžāĻā§
āĻāĻ lesson-āĻ āϝāĻž āĻļāĻŋāĻāĻŦā§
submitevent-āĻāϰ āĻā§āϤāϰ⧠āĻāĻāĻāĻž form-āĻāϰ field-āĻā§āϞ⧠āĻĒāĻĄāĻŧā§, āĻāϰpreventDefaultāĻĻāĻŋāϝāĻŧā§ page-āĻā§ āĻāϞ⧠āϝā§āϤ⧠āĻĻāĻŋāĻ āύāĻžāĨ¤- āĻŦā§āĻāĻŋāϝāĻŧā§ āĻŦāϞ⧠āĻĒā§āϰāϤāĻŋāĻāĻž field āĻā§āύ string āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ, āĻāϰ āϝā§āĻ āĻāϰāĻžāϰ āĻāĻā§ āĻāĻāĻāĻž number field-āĻā§ number āĻŦāĻžāύāĻžāĻāĨ¤
- āĻāĻāĻāĻž page-āĻāϰ state JSON text āĻšāĻŋāϏā§āĻŦā§ storage-āĻ āϰāĻžāĻā§, āĻāϰ page āĻāĻŦāĻžāϰ āĻā§āϞāϞ⧠āϏā§āĻāĻž āĻĢā§āϰāϤ āĻĒāĻĄāĻŧā§āĨ¤
Mirpur-āĻ Nusrat āĻļā§āĻā§āϰ-āĻļāύāĻŋāĻŦāĻžāϰ⧠āĻāĻāĻāĻž āĻ āĻā§āĻā§āϰ club āĻāĻžāϞāĻžāϝāĻŧāĨ¤ āĻ āĻāĻāĻāĻž sign-up page āĻŦāĻžāύāĻŋāϝāĻŧā§āĻā§, āϤāĻžāϤ⧠āϤāĻŋāύāĻāĻž field: āĻāĻžāϤā§āϰā§āϰ āύāĻžāĻŽ, class, āĻāϰ āĻļāύāĻŋāĻŦāĻžāϰā§āϰ batch-āĻāϰ āĻāύā§āϝ āĻāĻŋāĻ āĻĻā§āĻāϝāĻŧāĻžāϰ āĻāĻāĻāĻž āĻāϰāĨ¤ āĻāĻāĻāύ āĻ āĻāĻŋāĻāĻžāĻŦāĻ āϏāĻŦ āĻāϰ⧠āĻŦā§āϤāĻžāĻŽ āĻāĻžāĻĒāϞā§āύāĨ¤ Page āĻāĻāĻŦāĻžāϰ āĻāϞāĻā§ āĻāĻ āϞ, field-āĻā§āϞ⧠āĻĢāĻžāĻāĻāĻž āĻšāϝāĻŧā§ āĻā§āϞ, āĻāϰ āĻā§āĻĨāĻžāĻ āĻāĻŋāĻā§āĻ āϰāĻāϞ āύāĻžāĨ¤
āϤāĻžāϰāĻĒāϰ āĻāϰā§āĻāĻāĻž āϏāĻŽāϏā§āϝāĻžāĨ¤ Nusrat page-āĻ āĻāĻāĻāĻž āϞāĻŽā§āĻŦāĻž note-āĻāϰ āĻ āϰā§āϧā§āĻ āĻāĻžāĻāĻĒ āĻāϰā§āĻā§, āĻā§āϞ āĻāϰ⧠tab āĻŦāύā§āϧ āĻāϰ⧠āĻāĻŦāĻžāϰ āĻā§āϞāϞāĨ¤ Note āύā§āĻāĨ¤ Page āĻŦāύā§āϧ āĻšāĻāϝāĻŧāĻžāϰ āĻŽā§āĻšā§āϰā§āϤā§āĻ āϏāĻŦ āĻā§āϞ⧠āĻā§āĻā§āĨ¤
āĻāĻ module-āĻāϰ āϏāĻŽāϏā§āϝāĻž āĻāĻ āĻĻā§āĻā§āĻāĨ¤ Form-āĻā§ page āĻā§āĻĄāĻŧā§ āύāĻž āĻāĻŋāϝāĻŧā§ āύāĻŋāĻā§āϰ value-āĻā§āϞ⧠āϤā§āĻŽāĻžāϰ code-āĻāϰ āĻšāĻžāϤ⧠āĻĻāĻŋāϤ⧠āĻšāĻŦā§āĨ¤ āĻāϰ page-āĻā§ āĻāĻāĻŦāĻžāϰ āĻā§āϞāĻž āĻĨā§āĻā§ āĻāϰā§āĻāĻŦāĻžāϰ āĻā§āϞāĻž āĻĒāϰā§āϝāύā§āϤ āĻāĻāĻā§ state āĻŽāύ⧠āϰāĻžāĻāϤ⧠āĻšāĻŦā§, āĻā§āύ⧠server āĻāĻžāĻĄāĻŧāĻžāĻāĨ¤ Module 14 āĻļāĻŋāĻāĻŋāϝāĻŧā§āĻā§ element āĻā§āĻāĻāĻž āĻāϰ event āĻļā§āύāĻžāĨ¤ āĻāĻ module āϤāĻžāϰ āĻāĻĒāϰ āĻĻāĻžāĻāĻĄāĻŧāĻžāϝāĻŧ, āĻāĻāĻāĻž form āĻāϰ āĻāĻāĻāĻž storage āĻāϰ⧠āĻāϰā§, āĻāϰ āĻļā§āώ āĻšāϝāĻŧ āϤāĻŋāύāĻāĻž āĻā§āĻ app āĻĻāĻŋāϝāĻŧā§: āĻāĻāĻāĻž note taker, āĻāĻāĻāĻž settings panel āĻāϰ āĻāĻāĻāĻž timerāĨ¤
Form āĻŽāĻžāύ⧠field-āĻāϰ āĻāĻāĻāĻž āĻŦāĻžāĻā§āϏ
Form āĻāĻŽāύ āĻāĻāĻāĻž element, āϝā§āĻāĻž field-āĻā§āϞā§āĻā§ āĻāĻāϏāĻžāĻĨā§ āϰāĻžāĻā§: text-āĻāϰ āĻāϰ, number-āĻāϰ āĻāϰ, checkbox āĻāϰ listāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž field āĻāĻāĻāĻž input, āĻāĻāĻāĻž select āĻŦāĻž āĻāĻāĻāĻž textareaāĨ¤ Field-āĻāϰ āĻāĻžāĻā§ āĻĒā§āĻāĻāĻžāĻ Module 14-āĻāϰ āĻŽāϤā§āĻ, document.getElementById āĻŦāĻž querySelector āĻĻāĻŋāϝāĻŧā§, āĻāϰ user āĻā§ āĻāĻžāĻāĻĒ āĻāϰā§āĻā§ āϏā§āĻāĻž āĻĒāĻĄāĻŧā§ āĻāϰ value āĻĨā§āĻā§āĨ¤
āĻāĻ āĻšāϞ⧠Nusrat-āĻāϰ form, āĻāĻāĻāĻž page āĻšāĻŋāϏā§āĻŦā§āĨ¤ Run āĻāĻžāĻĒā§, āĻāĻāĻāĻž āύāĻžāĻŽ āĻāĻžāĻāĻĒ āĻāϰā§, āĻāĻāĻāĻž class āĻŦāĻžāĻā§, āϤāĻžāϰāĻĒāϰ āĻŦā§āϤāĻžāĻŽ āĻāĻžāĻĒā§āĨ¤
<!doctype html>
<html>
<body>
<form id="signup">
<label>Name <input id="student" type="text"></label>
<label>Class <input id="grade" type="number" min="1" max="12"></label>
<label><input id="saturday" type="checkbox"> Saturday batch</label>
<button type="submit">Sign up</button>
</form>
<p id="result">Nobody has signed up yet.</p>
<script>
const form = document.getElementById("signup");
form.addEventListener("submit", (event) => {
event.preventDefault();
const who = document.getElementById("student").value;
const grade = document.getElementById("grade").value;
const saturday = document.getElementById("saturday").checked;
document.getElementById("result").textContent =
who + " joins class " + grade + (saturday ? ", Saturday batch" : "");
console.log({ who, grade, saturday });
});
</script>
</body>
</html>
Run in Compiler
Page-āĻ āĻĻā§āĻāĻž āϝāĻžāϝāĻŧ āϤāĻŋāύāĻāĻž field āĻāϰ āϤāĻžāϰ āύāĻŋāĻā§ āĻāĻ āϞāĻžāĻāύ āϞā§āĻāĻžāĨ¤ āĻŦā§āϤāĻžāĻŽ āĻāĻžāĻĒāϞ⧠āϞāĻžāĻāύāĻāĻž āĻŦāĻĻāϞ⧠āĻšāϝāĻŧ āϤā§āĻŽāĻžāϰ āĻĻā§āĻāϝāĻŧāĻž āύāĻžāĻŽ, class āĻāϰ batchāĨ¤ Field-āĻā§āϞā§āϤ⧠āϤā§āĻŽāĻŋ āϝāĻž āĻāĻžāĻāĻĒ āĻāϰā§āĻ āϏā§āĻāĻž āĻĨā§āĻā§ āϝāĻžāϝāĻŧāĨ¤ Page-āĻāϰ āύāĻŋāĻā§āϰ console-āĻ āĻāĻāĻ āϤāĻŋāύāĻāĻž value āĻĻā§āĻāĻž āϝāĻžāϝāĻŧ, āĻāĻāĻāĻž object āĻšāĻŋāϏā§āĻŦā§āĨ¤
Text-āĻāϰ āĻāϰ āĻāϰ number-āĻāϰ āĻāϰ āĻĻā§āĻā§āĻ āύāĻŋāĻā§āϰ text āĻĻā§āϝāĻŧ value āĻĻāĻŋāϝāĻŧā§āĨ¤ Checkbox āĻāϞāĻžāĻĻāĻž: āĻāϰ value āĻāĻāĻāĻž āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ label, āĻāϰ āĻāĻŋāĻ āĻĻā§āĻāϝāĻŧāĻž āĻāĻā§ āĻāĻŋāύāĻž āϏā§āĻāĻž āĻĨāĻžāĻā§ checked-āĻ, āϝā§āĻāĻž true āĻŦāĻž falseāĨ¤ āϏāĻŦ āϰāĻāĻŽ field āĻĻā§āĻāĻžāĻŦā§ Lesson 02āĨ¤
submit āĻāϰ preventDefault
Form-āĻāϰ āĻāĻāĻāĻž āύāĻŋāĻāϏā§āĻŦ āĻāĻžāĻ āĻāĻā§āĨ¤ User āϝāĻāύ āĻāϰ submit āĻŦā§āϤāĻžāĻŽ āĻāĻžāĻĒā§, āĻŦāĻž āĻā§āύ⧠text-āĻāϰ āĻāϰ⧠Enter āĻāĻžāĻĒā§, browser āϏā§āĻāĻž submit āĻāϰā§āĨ¤ Submit āĻŽāĻžāύā§: āĻĒā§āϰāϤāĻŋāĻāĻž field āĻāĻĄāĻŧā§ āĻāϰā§, form-āĻāϰ action-āĻ āϞā§āĻāĻž āĻ āĻŋāĻāĻžāύāĻžāϝāĻŧ āĻĒāĻžāĻ āĻžāĻ, āĻāϰ āϝ⧠page āĻĢā§āϰāϤ āĻāϏ⧠āϏā§āĻāĻž load āĻāϰā§āĨ¤ JavaScript-āĻāϰ āĻāĻā§ web āĻāĻāĻžāĻŦā§āĻ āĻāϞāϤ, āĻāϰ āĻā§āύ⧠script āĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻāĻž āĻāĻāĻ āĻāϞā§āĨ¤
āĻāĻāĻž āĻāϰāĻžāϰ āĻāĻā§ browser form-āĻāϰ āĻāĻĒāϰ āĻāĻāĻāĻž submit event āĻāĻžāĻĄāĻŧā§āĨ¤ āϤā§āĻŽāĻžāϰ listener āĻāϞ⧠āĻāĻā§āĨ¤ āϤāĻžāϰ āĻā§āϤāϰ⧠event.preventDefault() browser-āĻāϰ āύāĻŋāĻā§āϰ āĻāĻžāĻāĻāĻž āĻŦāĻžāϤāĻŋāϞ āĻāϰ⧠āĻĻā§āϝāĻŧ, āϤāĻžāĻ page āϝā§āĻāĻžāύ⧠āĻāĻŋāϞ āϏā§āĻāĻžāύā§āĻ āĻĨāĻžāĻā§āĨ¤ āĻāĻŦāĻžāϰ value-āĻā§āϞā§āϰ āĻā§ āĻšāĻŦā§, āϏā§āĻāĻž āĻ āĻŋāĻ āĻāϰ⧠āϤā§āĻŽāĻžāϰ codeāĨ¤
āĻļā§āύ⧠form-āĻāϰ submit, āĻŦā§āϤāĻžāĻŽā§āϰ click āύāĻžāĨ¤ āĻā§āĻ field-āĻāϰ āĻā§āϤāϰ⧠Enter āĻāĻžāĻĒāϞā§āĻ submit event āĻāϏā§, āĻāϰ āĻāϏ⧠browser-āĻāϰ āύāĻŋāĻā§āϰ āϝāĻžāĻāĻžāĻ āĻĒāĻžāϰ āĻšāĻāϝāĻŧāĻžāϰ āĻĒāϰā§āĻ, āϝā§āĻŽāύ āĻāĻāĻāĻž required fieldāĨ¤ click listener Enter āĻāĻžāĻĒāĻž āϧāϰāϤ⧠āĻĒāĻžāϰ⧠āύāĻž, āĻāϰ form āϤā§āϰāĻŋ āύāĻž āĻĨāĻžāĻāϞā§āĻ āĻāϞ⧠āϝāĻžāϝāĻŧāĨ¤
Reader-āĻāϰ preview-āϤ⧠āύāĻž āĻĨāĻžāĻŽāĻžāύ⧠form-āĻ page āĻā§āĻĄāĻŧā§ āϝāĻžāϝāĻŧ āύāĻž, āĻāĻžāϰāĻŖ preview āĻā§āĻĨāĻžāĻ āĻāĻŋāĻā§ āĻĒāĻžāĻ āĻžāϝāĻŧ āύāĻžāĨ¤ āĻāϏāϞ site-āĻ āϝā§āϤ, āĻāϰ field-āĻā§āϞ⧠āĻĢāĻžāĻāĻāĻž āĻšāϝāĻŧā§ āϝā§āϤ, āĻ āĻŋāĻ Nusrat-āĻāϰ āĻŽāϤā§āĨ¤ āϤāĻžāĻ āĻāĻ module-āĻāϰ āĻĒā§āϰāϤāĻŋāĻāĻž form handler āϏāĻŦāĻžāϰ āĻāĻā§ preventDefault() āĻĄāĻžāĻā§āĨ¤
āĻĒā§āϰāϤāĻŋāĻāĻž field āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ string
Module 2-āĻ āĻāĻāĻāĻž āύāĻŋāϝāĻŧāĻŽ āĻĻā§āĻā§āĻāĻŋāϞā§, āĻāĻŦāĻžāϰ āϤāĻžāϰ āĻāϏāϞ āĻĢāϞ āĻĻā§āĻāĻŦā§āĨ¤ āĻāĻāĻāĻž field-āĻāϰ value āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻāĻāĻž string, type="number" āĻĻā§āĻāϝāĻŧāĻž āĻāϰā§āĻāĨ¤ Browser āĻāĻāĻāĻž number pad āĻĻā§āĻāĻžāϝāĻŧ āĻ āĻŋāĻāĻ, āĻāĻŋāύā§āϤ⧠āĻšāĻžāϤ⧠āĻĻā§āϝāĻŧ textāĨ¤ āĻāĻŽāύ āĻĻā§āĻā§ value + āĻĻāĻŋāϝāĻŧā§ āϝā§āĻ āĻāϰāϞ⧠āĻĻā§āĻā§ string āĻā§āĻĄāĻŧāĻž āϞāĻžāĻā§āĨ¤
Preview āĻāĻžāĻĄāĻŧāĻž āĻāĻāĻžāύ⧠page āĻāϞ⧠āύāĻž, āϤāĻžāĻ āύāĻŋāĻā§āϰ program āĻĻā§āĻā§ field-āĻāϰ āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ āϏāĻžāϧāĻžāϰāĻŖ object āĻŦāϏāĻžāϝāĻŧāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž object-āĻ āϏā§āĻ value, āϝā§āĻāĻž āĻāĻāĻāĻž number-āĻāϰ āĻāϰ āĻĻāĻŋāϤāĨ¤
const first = { value: "5" }; // what a type="number" box gives back
const second = { value: "2" };
console.log(first.value + second.value);
console.log(Number(first.value) + Number(second.value));
console.log(typeof first.value);
console.log(Number(""), Number(" "), Number("5kg"));
52
7
string
0 0 NaN
āĻĒā§āϰāĻĨāĻŽ āϞāĻžāĻāύ āϏāĻāĻā§āϝāĻž āϝā§āĻ āύāĻž āĻāϰ⧠text āĻĻā§āĻā§ āĻā§āĻĄāĻŧā§ āĻĻā§āϝāĻŧāĨ¤ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āϞāĻžāĻāύ āĻāĻā§ āĻĒā§āϰāϤāĻŋāĻāĻž value-āĻā§ Number āĻĻāĻŋāϝāĻŧā§ āĻŦāĻĻāϞāĻžāϝāĻŧ, āϤāĻžāĻ āϝā§āĻāĻĢāϞ āĻ āĻŋāĻ āĻāϏā§āĨ¤ āĻļā§āώ āϞāĻžāĻāύ⧠āĻĒāϰā§āϰ āĻāύā§āϝ āϤāĻŋāύāĻāĻž āĻĢāĻžāĻāĻĻ āϰāĻžāĻāĻžāĨ¤ āĻĢāĻžāĻāĻāĻž field āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ 0, āĻļā§āϧ⧠space-āĻāϝāĻŧāĻžāϞāĻž field-āĻ 0, āĻāϰ āϏāĻāĻā§āϝāĻž āύāĻž āĻāĻŽāύ text āĻšāϝāĻŧ NaNāĨ¤
āϤāĻžāĻ āĻ āĻā§āϝāĻžāϏāĻāĻž āĻā§āĻāĨ¤ Field āĻĒāĻĄāĻŧāĻžāϰ āĻŽā§āĻšā§āϰā§āϤā§āĻ āĻāĻā§ number āĻŦāĻžāύāĻžāĻ, āĻāϰ āĻŦāĻžāύāĻžāύā§āϰ āĻāĻā§ āĻ āĻŋāĻ āĻāϰ⧠āĻĢāĻžāĻāĻāĻž field āĻŽāĻžāύ⧠āĻā§āĨ¤ āĻĢāĻžāĻāĻāĻž class āĻŽāĻžāύ⧠class āĻļā§āύā§āϝ āύāĻžāĨ¤
Storage āϰāĻžāĻā§ āĻļā§āϧ⧠string
āĻāĻŦāĻžāϰ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āϏāĻŽāϏā§āϝāĻž: āĻŽāύ⧠āϰāĻžāĻāĻžāĨ¤ Browser āĻĒā§āϰāϤāĻŋāĻāĻž site-āĻā§ āĻāĻāĻāĻž āĻā§āĻ āĻāĻžāĻŖā§āĻĄāĻžāϰ āĻĻā§āϝāĻŧ, āύāĻžāĻŽ localStorageāĨ¤ āĻāĻāĻž key āĻāϰ value-āĻāϰ āĻā§āĻĄāĻŧāĻž āϰāĻžāĻā§, āĻāϰ tab āĻŦāύā§āϧ āĻāϰāϞā§, browser āĻŦāύā§āϧ āĻāϰāϞā§, āĻāĻŽāύāĻāĻŋ computer āĻāĻŦāĻžāϰ āĻāĻžāϞ⧠āĻāϰāϞā§āĻ āĻāĻŋāĻā§ āĻĨāĻžāĻā§āĨ¤ āĻāϰ āĻĒā§āϰāϧāĻžāύ āϤāĻŋāύāĻāĻž call āĻšāϞ⧠setItem(key, value), getItem(key) āĻāϰ removeItem(key)āĨ¤
āĻāĻ āĻāĻžāĻŖā§āĻĄāĻžāϰā§āϰ āĻāĻāĻāĻž āĻāĻĄāĻŧāĻž āύāĻŋāϝāĻŧāĻŽ: āĻāĻāĻž āĻļā§āϧ⧠string āϰāĻžāĻā§āĨ¤ setItem-āĻā§ āĻāĻāĻāĻž number, array āĻŦāĻž object āĻĻāĻŋāϞ⧠āϏ⧠āĻāĻā§ value-āĻāĻžāĻā§ string āĻŦāĻžāύāĻžāϝāĻŧ, āĻ āĻŋāĻ āϝā§āĻāĻžāĻŦā§ String(value) āĻŦāĻžāύāĻžāϝāĻŧāĨ¤ Object-āĻāϰ āĻŦā§āϞāĻžāϝāĻŧ āϏā§āĻ string āĻā§āύ⧠āĻāĻžāĻā§āϰ āύāĻžāĨ¤
Node-āĻ localStorage āύā§āĻ, āϤāĻžāĻ program āĻāĻāĻ call-āĻāϝāĻŧāĻžāϞāĻž āĻāĻāĻāĻž āĻŦāĻŋāĻāϞā§āĻĒ āĻŦāĻžāύāĻžāϝāĻŧāĨ¤ āĻāĻāĻž string āϰāĻžāĻā§ āĻāĻāĻāĻž Map-āĻ, āĻāϰ āĻĒā§āϰāϤāĻŋāĻāĻž value String āĻĻāĻŋāϝāĻŧā§ āĻŦāĻĻāϞāĻžāϝāĻŧ, āĻ āĻŋāĻ browser-āĻāϰ āĻāĻžāĻŖā§āĻĄāĻžāϰā§āϰ āĻŽāϤā§āĨ¤
const data = new Map();
const store = {
setItem(key, value) { data.set(key, String(value)); },
getItem(key) { return data.has(key) ? data.get(key) : null; },
};
store.setItem("count", 3);
console.log(store.getItem("count"), typeof store.getItem("count"));
store.setItem("settings", { theme: "dark" });
console.log(store.getItem("settings"));
store.setItem("settings", JSON.stringify({ theme: "dark" }));
console.log(store.getItem("settings"));
console.log(JSON.parse(store.getItem("settings")).theme);
console.log(store.getItem("missing"));
3 string
[object Object]
{"theme":"dark"}
dark
null
Number-āĻāĻž āĻĢā§āϰāϤ āĻāϏ⧠string "3" āĻšāϝāĻŧā§āĨ¤ Object āĻĢā§āϰāϤ āĻāϏ⧠[object Object] āĻšāϝāĻŧā§, āĻāϰ āĻā§āϤāϰā§āϰ theme āĻāĻŋāϰāϤāϰ⧠āĻšāĻžāϰāĻŋāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤ Object-āĻā§ JSON.stringify-āĻ āĻŽā§āĻĄāĻŧā§ āĻĻāĻŋāϞ⧠āĻāϏāϞ text āĻāĻŽāĻž āĻšāϝāĻŧ, āĻāϰ JSON.parse āϏā§āĻāĻžāĻā§ āĻāĻŦāĻžāϰ object āĻŦāĻžāύāĻžāϝāĻŧāĨ¤ āϝ⧠key āĻāĻāύ⧠set āĻšāϝāĻŧāύāĻŋ, āϏ⧠āĻĻā§āϝāĻŧ null, undefined āύāĻžāĨ¤
āĻāĻ āĻā§āĻĄāĻŧāĻžāĻāĻžāĻ storage-āĻāϰ āĻĒā§āϰ⧠āĻāĻžāĻāĻāĨ¤ āϞā§āĻā§ JSON.stringify āĻĻāĻŋāϝāĻŧā§, āĻĒāĻĄāĻŧā§ JSON.parse āĻĻāĻŋāϝāĻŧā§āĨ¤ JSON āύāĻŋāĻā§ āĻļāĻŋāĻāĻŋāϝāĻŧā§āĻā§ Module 8; āĻāĻāĻžāύ⧠āϏā§āĻāĻž āϤā§āĻŽāĻžāϰ object āĻāϰ string-āĻāϰ āĻāĻžāĻŖā§āĻĄāĻžāϰā§āϰ āĻŽāĻžāĻā§āϰ āϏā§āϤā§āĨ¤
Preview-āĻāϰ āύāĻŋāĻā§āϰ āĻā§āύ⧠storage āύā§āĻ
Reader-āĻāϰ preview-āϤ⧠āĻāϏāϞ localStorage āĻāĻžāϞāĻŋāϝāĻŧā§ āĻĻā§āĻā§āĨ¤ āύāĻŋāĻā§āϰ page āĻāĻāĻāĻž try-āĻāϰ āĻā§āϤāϰ⧠āĻāĻā§ āĻāĻžāϝāĻŧ, āĻāϰ āĻā§ āĻšāϞ⧠āϏā§āĻāĻž āĻāĻžāύāĻžāϝāĻŧāĨ¤
<!doctype html>
<html>
<body>
<p id="report">Checking storage...</p>
<script>
const report = document.getElementById("report");
try {
localStorage.setItem("visits", "1");
report.textContent = "Storage works on this page.";
} catch (err) {
report.textContent = "Storage refused: " + err.name;
console.log(err.name + ": " + err.message);
}
</script>
</body>
</html>
Run in Compiler
Preview-āϤ⧠page āϞā§āĻā§ Storage refused: SecurityError, āĻāϰ console āĻĻā§āĻāĻžāϝāĻŧ browser-āĻāϰ āύāĻŋāĻā§āϰ message, āϝā§āĻāĻž browser āĻā§āĻĻā§ āĻāϞāĻžāĻĻāĻžāĨ¤ Preview āĻāĻāĻāĻž āĻŦāύā§āϧ frame, āϝāĻžāϰ āύāĻŋāĻā§āϰ āĻā§āύ⧠origin āύā§āĻ, āĻāϰ storage āĻĨāĻžāĻā§ āĻāĻāĻāĻž origin-āĻāϰ āĻŽāĻžāϞāĻŋāĻāĻžāύāĻžāϝāĻŧāĨ¤ āϤāĻžāĻ āĻāĻāĻžāύ⧠localStorage, sessionStorage, indexedDB āĻāϰ document.cookie āϏāĻŦāĻžāĻ throw āĻāϰā§āĨ¤
āĻāϏāϞ site-āĻ āĻāĻāĻ call āĻāĻžāĻ āĻāϰā§āĨ¤ Page-āĻāĻž file āĻšāĻŋāϏā§āĻŦā§ save āĻāϰ⧠āύāĻŋāĻā§āϰ browser-āĻ āĻā§āϞāϞā§āĻ āĻāĻžāĻ āĻāϰā§āĨ¤ āϤāĻžāĻ āĻāĻ module-āĻāϰ page-āĻā§āϞ⧠āϤāĻžāĻ āĻāϰā§, āϝāĻž āϏāĻžāĻŦāϧāĻžāύ⧠āĻāϏāϞ code āĻāĻŽāύāĻŋāϤā§āĻ āĻāϰā§: āĻāĻā§ āĻāϏāϞ āĻāĻžāĻŖā§āĻĄāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§, throw āĻāϰāϞ⧠memory-āϤ⧠āĻāĻāĻāĻž āĻā§āĻ āĻŦāĻŋāĻāϞā§āĻĒā§ āĻāϞ⧠āϝāĻžāϝāĻŧāĨ¤ āĻŦāĻŋāĻāϞā§āĻĒāĻāĻžāϰ āĻāĻāĻ getItem, setItem āĻāϰ removeItem, āϤāĻžāĻ page-āĻāϰ āĻŦāĻžāĻāĻŋ āĻ
āĻāĻļ āϤāĻĢāĻžāϤāĻāĻž āĻā§āϰāĻ āĻĒāĻžāϝāĻŧ āύāĻžāĨ¤ Preview-āϤ⧠"āĻŽāύ⧠āϰāĻžāĻāĻž" state āĻāĻŋāĻā§ āĻĨāĻžāĻā§ āĻāĻŦāĻžāϰ Run āĻāĻžāĻĒāĻž āĻĒāϰā§āϝāύā§āϤāĨ¤
State, save āĻāϰ⧠āĻāĻŦāĻžāϰ āĻĒāĻĄāĻŧāĻž
āĻāĻāĻāĻž āĻā§āĻ app āϝāĻž āĻāĻžāύ⧠āϏāĻŦ āϰāĻžāĻā§ āĻāĻāĻāĻž object-āĻ, āĻāϰ state: note-āĻā§āϞā§, āĻŦā§āĻā§ āύā§āĻāϝāĻŧāĻž theme, timer-āĻāϰ āϏāĻŽāϝāĻŧāĨ¤ App save āĻāϰāĻž āĻŽāĻžāύ⧠āĻāĻ object-āĻā§ text āĻŦāĻžāύāĻŋāϝāĻŧā§ āϰā§āĻā§ āĻĻā§āĻāϝāĻŧāĻžāĨ¤ App āĻā§āϞāĻž āĻŽāĻžāύ⧠text āĻĒāĻĄāĻŧā§ āϤāĻž āĻĨā§āĻā§ āύāϤā§āύ āĻāĻāĻāĻž object āĻŦāĻžāύāĻžāύā§āĨ¤
āĻāĻ āĻāĻ āϞāĻžāĻāύ āĻāϰ⧠āĻāĻāύāĻžāĻāĻž āĻĻā§āĻā§āĨ¤ āϤā§āϰāĻā§āϞ⧠āĻĻā§āĻāĻžāϝāĻŧ āĻā§āύ āύāĻžāĻŽ āĻā§āύ object-āĻā§ āĻĻā§āĻāĻžāĻā§āĻā§āĨ¤
āĻŽā§āĻĄāĻŧ āĻā§āϰ⧠āϧāĻžāĻĒ 3-āĻāĨ¤ saved-āĻ āĻā§āύ⧠āϤā§āϰāĻ āύā§āĻ, āĻāĻā§ āĻļā§āϧ⧠āĻ
āĻā§āώāϰāĨ¤ Storage āĻāĻāĻžāĻ āϰāĻžāĻā§āĨ¤ āϧāĻžāĻĒ 4 āϏā§āĻ āĻ
āĻā§āώāϰ āĻĨā§āĻā§ āύāϤā§āύ āĻāĻāĻāĻž āĻĒā§āϰ⧠object-āĻāϰ āĻĒāϰāĻŋāĻŦāĻžāϰ āĻŦāĻžāύāĻžāϝāĻŧ, app āϝāϤāĻŦāĻžāϰ āĻā§āϞ⧠āϤāϤāĻŦāĻžāϰ āĻ āĻŋāĻ āĻāĻāĻžāĻ āĻāĻā§āĨ¤ āϧāĻžāĻĒ 5 āĻĻā§āĻāĻžāϝāĻŧ āĻĻā§āĻā§ āĻĒāϰāĻŋāĻŦāĻžāϰ āĻāϞāĻžāĻĻāĻž: āĻāĻāĻāĻž āĻŦāĻĻāϞāĻžāϞ⧠āĻāϰā§āĻāĻāĻž āĻāĻāύ⧠āĻā§āĻāϝāĻŧāĻž āĻĒāĻĄāĻŧā§ āύāĻžāĨ¤
āĻāĻ āύāĻāϰ⧠form āĻāϰ storage
form.addEventListener("submit", (event) => { // runs before the browser submits
event.preventDefault(); // stay on this page
const text = input.value; // always a string
const n = Number(numberInput.value); // convert before you add
const ticked = checkbox.checked; // true or false
});
localStorage.setItem("key", JSON.stringify(state)); // write: object to text
const state = JSON.parse(localStorage.getItem("key")); // read: text to object, null if never set
āĻāĻ āĻšāϞ⧠āĻĒā§āϰ⧠pageāĨ¤ āĻāĻāĻž sign-up-āĻāϰ āĻāĻāĻāĻž list āύāĻŋāĻā§āϰ state-āĻ āϰāĻžāĻā§, āĻĒā§āϰāϤāĻŋāĻāĻž submit-āĻāϰ āĻĒāϰ⧠list save āĻāϰā§, āĻāϰ āĻā§āύāĻžāĻāĻž āĻĻā§āĻāĻžāϝāĻŧāĨ¤ āĻāĻā§ āĻāϏāϞ āĻāĻžāĻŖā§āĻĄāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§, āύāĻž āĻĒā§āϞ⧠āĻŦāĻŋāĻāϞā§āĻĒā§ āϝāĻžāϝāĻŧāĨ¤
<!doctype html>
<html>
<body>
<form id="signup">
<label>Name <input id="student" type="text" required></label>
<label>Class <input id="grade" type="number" min="1" max="12" required></label>
<button type="submit">Sign up</button>
</form>
<p id="count"></p>
<script>
function memoryStore() {
const data = new Map();
return {
getItem(key) { return data.has(key) ? data.get(key) : null; },
setItem(key, value) { data.set(key, String(value)); },
removeItem(key) { data.delete(key); },
};
}
let store;
try {
localStorage.getItem("probe");
store = localStorage;
} catch (err) {
console.log("using the memory stand-in: " + err.name);
store = memoryStore();
}
const signups = JSON.parse(store.getItem("club-signups")) || [];
const show = () => {
document.getElementById("count").textContent = signups.length + " signed up";
};
show();
document.getElementById("signup").addEventListener("submit", (event) => {
event.preventDefault();
const who = document.getElementById("student").value.trim();
const grade = Number(document.getElementById("grade").value);
signups.push({ who, grade });
store.setItem("club-signups", JSON.stringify(signups));
event.target.reset();
show();
});
</script>
</body>
</html>
Page āĻā§āϞ⧠0 signed up āĻĻāĻŋāϝāĻŧā§āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž sign-up āĻā§āύāĻžāϝāĻŧ āĻāĻ āϝā§āĻ āĻāϰā§, āĻāϰ āĻĒāϰā§āϰ āĻ
āĻāĻŋāĻāĻžāĻŦāĻā§āϰ āĻāύā§āϝ form āĻāĻžāϞāĻŋ āĻāϰ⧠āĻĻā§āϝāĻŧāĨ¤ āĻāĻāĻāĻž field āĻĢāĻžāĻāĻāĻž āϰā§āĻā§ āĻŦā§āϤāĻžāĻŽ āĻāĻžāĻĒā§: browser āĻāĻ field-āĻāϰ āĻāĻĒāϰ āύāĻŋāĻā§āϰ message āĻĻā§āĻāĻžāϝāĻŧ, āĻāϰ submit event āĻāϏā§āĻ āύāĻžāĨ¤ āĻāϏāϞ site-āĻ reload-āĻāϰ āĻĒāϰā§āĻ āĻā§āύāĻž āĻāĻŋāĻā§ āĻĨāĻžāĻā§, āĻāĻžāϰāĻŖ list āĻĨāĻžāĻā§ localStorage-āĻāĨ¤
JSON.parse(store.getItem("club-signups")) || [] āϞāĻžāĻāύāĻāĻž āĻā§āϝāĻŧāĻžāϞ āĻāϰā§āĨ¤ āĻāĻāĻĻāĻŽ āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āĻāĻŋāĻā§āĻ save āĻāϰāĻž āύā§āĻ, āϤāĻžāĻ getItem āĻĻā§āϝāĻŧ nullāĨ¤ JSON.parse(null) āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ null, āĻāϰ || [] āϏā§āĻāĻžāĻā§ āĻŦāĻžāύāĻžāϝāĻŧ āĻĢāĻžāĻāĻāĻž listāĨ¤
āĻāĻĒāϰā§āϰ page āĻāĻāĻžāύ⧠āύāĻŋāĻā§āϰ save āĻāϰāĻž text print āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āύāĻž, āϤāĻžāĻ āĻāĻ program āĻāĻāĻ save āĻāϰ load āĻāĻžāϞāĻžāϝāĻŧ Node-āĻ, āĻŦāĻŋāĻāϞā§āĻĒāĻāĻž āĻĻāĻŋāϝāĻŧā§āĨ¤ "Reload" āĻšāϞ⧠āĻļā§āϧ⧠āĻāĻžāĻŖā§āĻĄāĻžāϰ āĻĨā§āĻā§ āĻŦāĻžāύāĻžāύ⧠āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āĻāĻāĻāĻž stateāĨ¤
const data = new Map();
const store = {
getItem(key) { return data.has(key) ? data.get(key) : null; },
setItem(key, value) { data.set(key, String(value)); },
};
const signups = JSON.parse(store.getItem("club-signups")) || [];
signups.push({ who: "Rafi", grade: 7 });
signups.push({ who: "Mitu", grade: 9 });
store.setItem("club-signups", JSON.stringify(signups));
console.log(store.getItem("club-signups"));
const afterReload = JSON.parse(store.getItem("club-signups")) || [];
console.log(afterReload.length, afterReload[1].who, typeof afterReload[1].grade);
console.log(afterReload === signups);
[{"who":"Rafi","grade":7},{"who":"Mitu","grade":9}]
2 Mitu number
false
āĻĒā§āϰāĻĨāĻŽ āϞāĻžāĻāύ āĻšāϞ⧠āĻāĻžāĻŖā§āĻĄāĻžāϰ⧠āĻĨāĻžāĻāĻž āĻšā§āĻŦāĻšā§ textāĨ¤ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āϞāĻžāĻāύ āĻĻā§āĻāĻžāϝāĻŧ āĻāĻ text āĻĨā§āĻā§ āĻāĻŦāĻžāϰ āĻŦāĻžāύāĻžāύ⧠list: āĻĻā§āĻā§ sign-up, āĻāϰ class āĻāĻāύ⧠number, āĻāĻžāϰāĻŖ JSON number-āĻā§ number āĻšāĻŋāϏā§āĻŦā§āĻ āϰāĻžāĻā§āĨ¤ āĻļā§āώ āϞāĻžāĻāύ false: reload āĻāϰāĻž list āĻāĻāĻāĻž āύāϤā§āύ array, widget-āĻāϰ āϧāĻžāĻĒ 4-āĻāϰ āĻŽāϤā§āĨ¤
āĻāĻāĻž āĻā§āĻĨāĻžāϝāĻŧ āĻāĻžāĻā§ āϞāĻžāĻā§
- The New York Times-āĻāϰ Wordle: āϤā§āĻŽāĻžāϰ streak āĻāϰ āĻšāĻŋāϏāĻžāĻŦ āĻĨāĻžāĻā§ browser-āĻāϰ
localStorage-āĻ, āĻāĻ āĻāĻžāϰāĻŖā§āĻ āύāϤā§āύ phone-āĻ āϏā§āĻā§āϞ⧠āĻļā§āύā§āϝ āĻĻā§āĻāĻžāϝāĻŧāĨ¤ - Excalidraw: whiteboard āϤā§āĻŽāĻžāϰ āĻāĻāĻāĻž
localStorage-āĻ āϰāĻžāĻā§, āϤāĻžāĻ āĻā§āύ⧠account āĻāĻžāĻĄāĻŧāĻžāĻ reload āĻāϰāϞ⧠āĻāĻāĻāĻž āĻĢā§āϰāϤ āĻāϏā§āĨ¤ - āĻĒā§āϰāϤāĻŋāĻāĻž browser-āĻāϰ āύāĻŋāĻā§āϰ form āϝāĻžāĻāĻžāĻ: āĻāĻāĻāĻž
requiredfield āύāĻŋāĻā§āĻ submit āĻĨāĻžāĻŽāĻžāϝāĻŧ āĻāϰ āĻāĻāĻāĻž message āĻĻā§āĻāĻžāϝāĻŧ, āĻā§āύ⧠script āĻāϞāĻžāϰ āĻāĻā§āĻāĨ¤
āϝ⧠āĻā§āϞāĻā§āϞ⧠āϏāĻŦāĻžāĻ āĻāϰā§
ā§§. JSON āĻāĻžāĻĄāĻŧāĻž object āϰāĻžāĻāĻž
const data = new Map();
const store = {
setItem(key, value) { data.set(key, String(value)); },
getItem(key) { return data.get(key); },
};
const settings = { theme: "dark", size: 18 };
store.setItem("settings", settings);
console.log(store.getItem("settings"));
console.log(store.getItem("settings").theme);
[object Object]
undefined
āĻāĻžāĻŖā§āĻĄāĻžāϰ object-āĻāĻžāĻā§ text [object Object] āĻŦāĻžāύāĻŋāϝāĻŧā§ āĻĢā§āϞā§āĻā§, theme āĻāϰ size āĻĻā§āĻā§āĻ āύā§āĻāĨ¤ āĻāĻāĻāĻž string āĻĨā§āĻā§ .theme āĻĒāĻĄāĻŧāϞ⧠āĻāϏ⧠undefined, āĻāϰ āĻā§āύ⧠error āϏāĻžāĻŦāϧāĻžāύ āĻāϰ⧠āύāĻžāĨ¤ āϞā§āĻā§ store.setItem("settings", JSON.stringify(settings)), āĻāϰ āĻĢā§āϰāϤ āĻĒāĻĄāĻŧā§ JSON.parse āĻĻāĻŋāϝāĻŧā§āĨ¤
⧍. āĻĻā§āĻā§ field-āĻā§ string āĻšāĻŋāϏā§āĻŦā§ āϝā§āĻ āĻāϰāĻž
const price = { value: "120" };
const quantity = { value: "3" };
const deliveryFee = 60;
console.log(price.value * quantity.value + deliveryFee);
console.log(price.value + deliveryFee);
420
12060
āĻĒā§āϰāĻĨāĻŽ āϞāĻžāĻāύ āĻ āĻŋāĻ āĻĻā§āĻāĻžāϝāĻŧ, āĻāĻžāϰāĻŖ * āύāĻŋāĻā§āĻ āĻĻā§āĻā§ string-āĻā§ number āĻŦāĻžāύāĻŋāϝāĻŧā§ āύā§āϝāĻŧāĨ¤ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āϞāĻžāĻāύ "120" āĻāϰ 60 āĻā§āĻĄāĻŧā§ āĻāĻāĻāĻž āϞāĻŽā§āĻŦāĻž string āĻŦāĻžāύāĻžāϝāĻŧāĨ¤ Code āĻāĻāĻāĻž operator-āĻ āĻāϞā§, āĻĒāϰā§āϰāĻāĻžāϝāĻŧ āĻāĻžāĻā§āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž field āĻĒāĻĄāĻŧāĻžāϰ āϏāĻŽāϝāĻŧā§āĻ Number āĻĻāĻŋāϝāĻŧā§ āĻŦāĻĻāϞ⧠āύāĻžāĻ, āϤāĻžāĻšāϞ⧠āĻĒā§āϰāĻļā§āύāĻāĻžāĻ āĻāĻ ā§ āύāĻžāĨ¤
ā§Š. āĻāĻāύ⧠save āĻšāϝāĻŧāύāĻŋ āĻāĻŽāύ key parse āĻāϰāĻž
const data = new Map();
const getItem = (key) => (data.has(key) ? data.get(key) : null);
const state = JSON.parse(getItem("notes-app"));
console.log(state.notes.length);
TypeError: Cannot read properties of null (reading 'notes')
āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āĻāĻŋāĻā§āĻ save āĻĨāĻžāĻā§ āύāĻž, āϤāĻžāĻ getItem āĻĻā§āϝāĻŧ null, āĻāϰ JSON.parse(null)-āĻ āĻĻā§āϝāĻŧ nullāĨ¤ āĻĒāϰā§āϰ āϞāĻžāĻāύ āĻĨā§āĻŽā§ āϝāĻžāϝāĻŧ TypeError: Cannot read properties of null (reading 'notes') āĻĻāĻŋāϝāĻŧā§āĨ¤ āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰā§āϰ āĻāύā§āϝ āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻāĻāĻž default āĻĻāĻžāĻ: JSON.parse(getItem("notes-app")) || { notes: [] }āĨ¤
Tanvir āĻāĻāĻāĻž āĻā§āĻ quiz app āĻŦāĻžāύāĻŋāϝāĻŧā§āĻā§, āϝā§āĻāĻž āĻāϤā§āϤāϰāĻā§āϞ⧠browser-āĻāϰ storage-āĻ āĻŽāύ⧠āϰāĻžāĻā§āĨ¤ āĻ āϏāϰāĻžāϏāϰāĻŋ value āĻĻāĻŋāϝāĻŧā§ setItem āĻĄā§āĻā§āĻā§, JSON.stringify āĻĻāĻŋāϤ⧠āĻā§āϞ⧠āĻā§āĻā§āĨ¤ Storage āĻļā§āϧ⧠text āϰāĻžāĻā§, āϤāĻžāĻ āĻĒā§āϰāϤāĻŋāĻāĻž value string āĻšāϝāĻŧā§ āĻā§āĻā§, āĻ āĻŋāĻ āϝā§āĻāĻžāĻŦā§ String(value) āĻŦāĻžāύāĻžāϝāĻŧāĨ¤ Tanvir āĻĻā§āĻāϤ⧠āĻāĻžāϝāĻŧ āĻāϰ app āĻāϏāϞ⧠āĻā§ save āĻāϰā§āĻā§āĨ¤
Input. āĻĒā§āϰāĻĨāĻŽ āϞāĻžāĻāύ⧠nāĨ¤ āĻĒāϰā§āϰ n āĻāĻž āϞāĻžāĻāύā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻžāϝāĻŧ JSON-āĻ āϞā§āĻāĻž āĻāĻāĻāĻž value: āĻāĻāĻāĻž number, āĻāĻāĻāĻž string, true, false, null, āĻāĻāĻāĻž array āĻ
āĻĨāĻŦāĻž āĻāĻāĻāĻž objectāĨ¤
Output. āĻĒā§āϰāϤāĻŋāĻāĻž value-āĻāϰ āĻāύā§āϝ āĻāĻ āϞāĻžāĻāύ: āĻāĻ value setItem āĻĻāĻŋāϝāĻŧā§ āϰāĻžāĻāĻžāϰ āĻĒāϰ⧠getItem āϝ⧠text āĻĢā§āϰāϤ āĻĻāĻŋāϤāĨ¤ Text-āĻāĻž āύāĻŋāĻā§āĻ JSON string āĻšāĻŋāϏā§āĻŦā§ print āĻāϰā§, quote-āϏāĻš, āϝāĻžāϤ⧠āĻĢāĻžāĻāĻāĻž text-āĻ "" āĻšāϝāĻŧā§ āĻĻā§āĻāĻž āϝāĻžāϝāĻŧāĨ¤
Constraints. 1 <= n <= 1000. Each line is valid JSON of at most 200 characters, and the last line is not empty..
Sample.
6
42
"hello"
{"theme":"dark"}
[1,[2,3]]
null
[]
"42"
"hello"
"[object Object]"
"1,2,3"
"null"
""
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"));
Run in Compiler
setitem-strings āύāĻžāĻŽā§ grade āĻšāϝāĻŧāĨ¤
Nusrat āĻĻā§āĻāϤ⧠āĻāĻžāϝāĻŧ āĻāϰ sign-up page āĻ āĻŋāĻ āĻā§ save āĻāϰā§āĨ¤ Sign-up-āĻā§āϞ⧠āĻĒāĻĄāĻŧā§, class-āĻā§ number āϰā§āĻā§ object-āĻāϰ āĻāĻāĻāĻž list āĻŦāĻžāύāĻžāĻ, āĻāϰ āϏā§āĻāĻž JSON āĻšāĻŋāϏā§āĻŦā§ āϰāĻžāĻā§āĨ¤ āϤāĻžāϰāĻĒāϰ āϰāĻžāĻāĻž text āĻāϰ āϤāĻž āĻĨā§āĻā§ āĻĢā§āϰāϤ āĻĒāĻĄāĻŧāĻž āĻā§āύāĻžāĻāĻž print āĻāϰā§āĨ¤
Input. n, āϤāĻžāϰāĻĒāϰ n āĻāĻž āϞāĻžāĻāύ, āĻĒā§āϰāϤāĻŋāĻāĻžāϝāĻŧ āĻāĻāĻāĻž āύāĻžāĻŽ āĻāϰ āĻāĻāĻāĻž classāĨ¤
Output. āĻāĻ āϞāĻžāĻāύ⧠āϰāĻžāĻāĻž JSON text, āϤāĻžāϰāĻĒāϰ count N, āϝā§āĻāĻžāύ⧠N āĻšāϞ⧠āĻāĻ text āĻĨā§āĻā§ parse āĻāϰ⧠āĻĢā§āϰāϤ āĻĒāĻžāĻāϝāĻŧāĻž list-āĻāϰ āĻĻā§āϰā§āĻā§āϝāĨ¤
Constraints. 1 <= n <= 20āĨ¤ āύāĻžāĻŽ 1 āĻĨā§āĻā§ 10 āĻ āĻā§āώāϰā§āϰ, āĻāϰ class 1 āĻĨā§āĻā§ 12āĨ¤
Sample. āύāĻŋāĻā§āϰ inputāĨ¤
3
Rafi 7
Mitu 9
Sumon 7
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"));
Sample-āĻāϰ output.
[{"who":"Rafi","grade":7},{"who":"Mitu","grade":9},{"who":"Sumon","grade":7}]
count 3
Run in Compiler
āĻāĻāĻāĻž fee-āϰ page-āĻ number field-āĻāϰ āĻāĻāĻāĻž āĻāϞāĻžāĻŽ āĻāĻā§, āĻāϰ Nusrat āĻāĻā§āϞā§āϰ value āϝā§āĻāĻžāĻŦā§ āĻāĻžāĻāĻĒ āĻāϰāĻž āĻāĻŋāϞ āϏā§āĻāĻžāĻŦā§āĻ āĻāĻĒāĻŋ āĻāϰā§āĻā§āĨ¤ āĻāĻŋāĻā§ āĻĢāĻžāĻāĻāĻž, āĻāĻŋāĻā§āϤ⧠āĻļā§āϧ⧠space, āĻāϰ āĻāĻŋāĻā§āϤ⧠āĻāĻŽāύ text āϝā§āĻāĻž āϏāĻāĻā§āϝāĻž āύāĻžāĨ¤ āĻāϏāϞ āϏāĻāĻā§āϝāĻžāĻā§āϞ⧠āϝā§āĻ āĻāϰā§, āĻāϰ āĻŦāĻžāĻāĻŋ āĻĻā§āĻ āϰāĻāĻŽ āĻāϞāĻžāĻĻāĻž āĻāϰ⧠āĻā§āύā§āĨ¤
Input. āĻĒā§āϰāĻĨāĻŽ āϞāĻžāĻāύ⧠n, āϤāĻžāϰāĻĒāϰ n āĻāĻž āϞāĻžāĻāύ, āĻĒā§āϰāϤāĻŋāĻāĻžāϝāĻŧ āĻāĻāĻāĻž field-āĻāϰ value, āĻ āĻŋāĻ āϝā§āĻāĻžāĻŦā§ āĻāĻžāĻāĻĒ āĻāϰāĻžāĨ¤ āĻā§āύ⧠āϞāĻžāĻāύ āĻĢāĻžāĻāĻāĻž āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤
Output. āϤāĻŋāύāĻāĻž āϞāĻžāĻāύ: āϏāĻāĻā§āϝāĻž āĻāĻā§ āĻāĻŽāύ field-āĻā§āϞā§āϰ āϝā§āĻāĻĢāϞ āύāĻŋāϝāĻŧā§ total T, āĻĢāĻžāĻāĻāĻž āĻŦāĻž āĻļā§āϧ⧠space-āĻāϝāĻŧāĻžāϞāĻž field-āĻā§āϞ⧠āύāĻŋāϝāĻŧā§ empty E, āĻāϰ āĻŦāĻžāĻāĻŋāĻā§āϞ⧠āύāĻŋāϝāĻŧā§ invalid IāĨ¤
Constraints. 1 <= n <= 50āĨ¤ āĻāĻāĻāĻž value āĻŦāĻĄāĻŧāĻā§āϰ 10 āĻ āĻā§āώāϰā§āϰ, āĻāϰ āĻļā§āώ āϞāĻžāĻāύ āĻĢāĻžāĻāĻāĻž āύāĻžāĨ¤
Sample. āύāĻŋāĻā§āϰ inputāĨ¤ āĻāϰ āϤā§āϤā§āϝāĻŧ āϞāĻžāĻāύ āĻĢāĻžāĻāĻāĻž, āĻāϰ āĻāϤā§āϰā§āĻĨ āϞāĻžāĻāύ⧠āĻĻā§āĻā§ spaceāĨ¤
6
500
250
abc
1200
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"));
Sample-āĻāϰ output.
total 1950
empty 2
invalid 1
Run in Compiler
āϏāĻāϰāĻžāĻāϰ āϝ⧠āĻĒā§āϰāĻļā§āύāĻā§āϞ⧠āĻāϏā§
Preview storage āĻĻā§āϝāĻŧ āύāĻž āĻā§āύ?
Storage āĻĨāĻžāĻā§ āĻāĻāĻāĻž origin-āĻāϰ āĻŽāĻžāϞāĻŋāĻāĻžāύāĻžāϝāĻŧ, āĻŽāĻžāύ⧠āĻāĻāĻāĻž site-āĻāϰ scheme, host āĻāϰ portāĨ¤ Preview āĻĒā§āϰāϤāĻŋāĻāĻž page āĻāĻžāϞāĻžāϝāĻŧ origin āĻāĻžāĻĄāĻŧāĻž āĻāĻāĻāĻž āĻŦāύā§āϧ frame-āĻ, āϝāĻžāϤ⧠āĻ āύā§āϝ āĻā§āύ⧠page āĻāϰ āϰāĻžāĻāĻž āĻāĻŋāύāĻŋāϏ āĻĒāĻĄāĻŧāϤ⧠āύāĻž āĻĒāĻžāϰā§āĨ¤ āϤāĻžāĻ browser āĻāĻāĻžāύ⧠storage āĻĻā§āϝāĻŧ āύāĻž, āĻāϰ āĻāĻāĻ code āϝā§āĻā§āύ⧠āĻāϏāϞ site-āĻ āĻāϞā§āĨ¤
localStorage āĻāϰ cookie āĻāĻŋ āĻāĻāĻ?
āύāĻžāĨ¤ āĻĻā§āĻā§āĻ browser-āĻ āĻĨāĻžāĻā§, āĻāĻŋāύā§āϤ⧠cookie āĻĒā§āϰāϤāĻŋāĻāĻž request-āĻāϰ āϏāĻžāĻĨā§ server-āĻ āϝāĻžāϝāĻŧ, āĻāϰ
localStorageāĻāĻāύ⧠browser āĻāĻžāĻĄāĻŧā§ āύāĻžāĨ¤ Cookie āĻā§āĻŦ āĻā§āĻāĻāĨ¤ Cookie āĻā§ āĻŦāϝāĻŧā§ āύāĻŋāϝāĻŧā§ āϝāĻžāϝāĻŧ, āϏā§āĻāĻž āĻĻā§āĻāĻžāĻŦā§ Lesson 05āĨ¤preventDefault āĻāĻŋ user-āĻā§ āĻāĻžāĻāĻĒ āĻāϰāϤ⧠āĻŦāĻžāϧāĻž āĻĻā§āϝāĻŧ?
āύāĻžāĨ¤ āĻāĻāĻž āĻļā§āϧ⧠āϝ⧠event-āĻāϰ āĻāĻĒāϰ āĻĄāĻžāĻāĻž āĻšāϝāĻŧā§āĻā§ āϤāĻžāϰ default āĻāĻžāĻāĻāĻž āĻŦāĻžāϤāĻŋāϞ āĻāϰā§āĨ¤
submit-āĻāϰ āĻŦā§āϞāĻžāϝāĻŧ āϏā§āĻ āĻāĻžāĻ āĻšāϞ⧠form āĻĒāĻžāĻ āĻžāύ⧠āĻāϰ āύāϤā§āύ page load āĻāϰāĻžāĨ¤ āĻāĻžāĻāĻĒ āĻāϰāĻž, click āĻāϰāĻž āĻāϰ browser-āĻāϰ āύāĻŋāĻā§āϰ āϝāĻžāĻāĻžāĻ āϏāĻŦ āϝā§āĻŽāύ āĻāĻŋāϞ āϤā§āĻŽāύāĻ āĻĨāĻžāĻā§āĨ¤Browser-āĻāϰ data āĻŽā§āĻā§ āĻĻāĻŋāϞ⧠localStorage-āĻāϰ āĻā§ āĻšāϝāĻŧ?
āĻāϞ⧠āϝāĻžāϝāĻŧ, cookie āĻāϰ āĻāĻ site-āĻāϰ āĻŦāĻžāĻāĻŋ data-āϰ āϏāĻžāĻĨā§āĨ¤ Private window-āĻ āĻĢāĻžāĻāĻāĻž āĻāĻžāĻŖā§āĻĄāĻžāϰ āĻĻāĻŋāϝāĻŧā§ āĻļā§āϰ⧠āĻšāϝāĻŧ āĻāϰ āĻļā§āώ⧠āϏā§āĻāĻž āĻĢā§āϞ⧠āĻĻā§āϝāĻŧāĨ¤ āϤāĻžāĻ
localStorageāϰāĻžāĻāĻž āĻāĻžāϞ⧠āĻāĻŽāύ āĻāĻŋāύāĻŋāϏā§āϰ āĻāύā§āϝ, āĻāϰā§āϰāĻŋ āĻā§āύ⧠āĻāĻŋāĻā§āϰ āĻāĻāĻŽāĻžāϤā§āϰ copy-āϰ āĻāύā§āϝ āĻāĻāύ⧠āύāĻžāĨ¤
āĻŽā§āϞ āĻāĻĨāĻž
- Form-āĻāϰ āĻāĻĒāϰ
submitāĻļā§āύā§,event.preventDefault()āĻĄāĻžāĻā§, āϤāĻžāϰāĻĒāϰ field-āĻā§āϞ⧠āĻĒāĻĄāĻŧā§āĨ¤ - āĻĒā§āϰāϤāĻŋāĻāĻž field-āĻāϰ
valueāĻāĻāĻāĻž string; checkbox-āĻāϰ āĻ āĻŦāϏā§āĻĨāĻžchecked-āĻ; āϏāĻāĻā§āϝāĻž āĻĒāĻĄāĻŧāĻžāϰ āϏāĻŽāϝāĻŧā§āĻ āĻŦāĻĻāϞ⧠āύāĻžāĻāĨ¤ - Storage āϰāĻžāĻā§ āĻļā§āϧ⧠string: āϞā§āĻā§
JSON.stringifyāĻĻāĻŋāϝāĻŧā§, āĻĒāĻĄāĻŧā§JSON.parseāĻĻāĻŋāϝāĻŧā§, āĻāϰnull-āĻāϰ āĻāύā§āϝ āĻāĻāĻāĻž default āĻĻāĻžāĻāĨ¤ - Preview-āϤ⧠storage āύā§āĻ, āϤāĻžāĻ page āĻāĻā§ āĻāϏāϞ āĻāĻžāĻŖā§āĻĄāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§, āύāĻž āĻĒā§āϞ⧠āĻāĻāĻ call-āĻāϝāĻŧāĻžāϞāĻž āĻŦāĻŋāĻāϞā§āĻĒā§ āϝāĻžāϝāĻŧāĨ¤
- App-āĻāϰ state āĻāĻāĻāĻž object; save āĻāϰāϞ⧠āϏā§āĻāĻž text āĻšāϝāĻŧ, āĻāϰ load āĻāϰāϞ⧠āĻāĻ text āĻĨā§āĻā§ āύāϤā§āύ object āϤā§āϰāĻŋ āĻšāϝāĻŧāĨ¤
- āĻāϰāĻ āĻāĻā§āϰ⧠āϝā§āϤ⧠āĻāĻžāĻāϞā§: āĻā§āϤāϰā§āϰ āĻāĻĨāĻž, origin, storage event, main thread āĻāϰ cookie (Pro)āĨ¤
āĻāϰāĻĒāϰ: āĻĒā§āϰāϤāĻŋāĻāĻž āϰāĻāĻŽā§āϰ field, browser-āĻāϰ āύāĻŋāĻā§āϰ āϝāĻžāĻāĻžāĻ, FormData, āĻĻā§āĻ āϰāĻāĻŽ storage āĻāϰ āϤāĻžāϰāĻŋāĻ, āĻāĻāĻāĻž āĻāĻāĻāĻž āĻāϰā§āĨ¤
lesson ā§§ āĻļā§āώ
āĻļā§āώ āĻšāϞ⧠āĻāĻŋāĻšā§āύ āĻĻāĻŋāύ, āĻ āĻā§āϰāĻāϤāĻŋ āĻāĻĒāύāĻžāϰ āϏāĻžāĻĨā§ āĻĨāĻžāĻāĻŦā§āĨ¤
āĻĒāϰā§āϰāĻāĻž: Form, storage āĻāϰ āϤāĻžāϰāĻŋāĻā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻž āĻšāĻžāϤāĻŋāϝāĻŧāĻžāϰ, āĻāĻāĻāĻž āĻāĻāĻāĻž āĻāϰā§