חידת Strict Mode ב JavaScript
29/04/2020
אני אוהב איך ש JavaScript לוקחת רעיונות ממקומות אחרים, שוברת ומעקמת אותם ובסוף מגישה מרק פושר ודלוח. טוב בקיצור די עם האוכל בואו נדבר רגע על קוד.
הקוד הבא מדפיס 9, וזה הגיוני אבל קצת מוזר:
let x = 09;
console.log(x);
מוזר כי ב Python קוד דומה זורק שגיאה:
# Error: SyntaxError: leading zeros in decimal integer literals are not permitted
x = 09
print(x)
ב Ruby הקוד זורק שגיאה:
# SyntaxError ((irb):1: Invalid octal digit)
x = 09
ב Clojure הקוד זורק שגיאה:
;; Invalid number: 09
(let [x 09] (print x))
והאמת שרק Scheme הסכימה לשתף איתי פעולה ולהדפיס את המספר 9 בדומה ל JavaScript:
(display 09)
אבל, ופה JavaScript מתחילה להיות מוזרה, נסו לחשוב מה קורה כשמחליפים את ה-9 ל-10:
let x = 010;
console.log(x);
ולחידה - מה קורה שם? למה זה קורה (רמז בהודעות השגיאה של כל השפות האחרות)? ואיך Strict Mode יכול לעזור לי להיזהר ממצבים כאלה?