חידון: האם אתה מכיר JavaScript מודרני?
הוכח את כישורי ה-JavaScript הנכבדים שלך!
האם אתה מזהה ES2015 לעומת ES2022?
- הוכיחו את כישורי ה-JavaScript שלכם! 🚀
- אין צורך בהתחברות או הרשמה. ✨
- שאלות אמריקאיות. 🤖 … כמה קשה זה יכול להיות, הא?
מה הפלט של הקוד הבא?
const obj = { foo: null };const result = obj.foo?.bar;console.log(result);בדוק את הסמנטיקה המדויקת של האופרטור ב-JavaScript. התשובה המפתה היא לעתים קרובות מה שתחביר ישן יותר היה עושה, לא מה שהתכונה הזו עושה.
אופרטור השרשור האופציונלי (?.) מפסיק את ההערכה אם הצד השמאלי הוא null או undefined. מכיוון ש-obj.foo הוא null, obj.foo?.bar מוערך ל-undefined.
מה הפלט של הקוד הבא?
const a = 42n;const result = a * 2n;console.log(result);בדוק את הסמנטיקה המדויקת של אופרטורים ב-JavaScript. התשובה המפתה היא לרוב מה שתחביר ישן יותר היה עושה, לא מה שהתכונה הזו עושה.
ערכי BigInt נוצרים על ידי הוספת n למספר. לא ניתן לערבב BigInt עם מספרים רגילים בפעולות אריתמטיות. כאן, שני הערכים הם BigInt, ולכן הכפל עובד, ומתקבל 84n.
מה יודפס?
const modulePromise = import('./myModule.js');console.log(typeof modulePromise);בדוק את הסמנטיקה המדויקת של האופרטור. התשובה המפתה היא לרוב מה שהיה קורה בתחביר ישן, לא מה שהתכונה הזו עושה.
הפונקציה import() מחזירה Promise שמתממש לאובייקט המודול. מכיוון שמופעי Promise הם אובייקטים, typeof modulePromise ידפיס 'object'.
מה תהיה התוצאה של הקוד הבא?
const promises = [ Promise.resolve('success'), Promise.reject('error')];Promise.allSettled(promises).then(results => { console.log(results[0].status + ': ' + results[0].value);});בדוק את הסמנטיקה המדויקת של האופרטור ב-JavaScript. התשובה המפתה היא לעתים קרובות מה שתחביר ישן יותר היה עושה, לא מה שהתכונה הזו עושה.
Promise.allSettled מחזירה מערך של אובייקטים המתארים את התוצאה של כל הבטחה. ההבטחה הראשונה היא fulfilled עם הערך 'success', לכן הצהרת ה-log תדפיס fulfilled: success.
מה מחזירה str.matchAll()?
const str = 'foo1bar2baz3';const matches = str.matchAll(/\d/g);בדוק את הסמנטיקה המדויקת של האופרטור ב-JavaScript. התשובה המפתה היא לרוב מה שתחביר ישן יותר היה עושה, לא מה שהתכונה הזו עושה.
String.matchAll מחזירה איטרטור של התאמות, לא מערך. ניתן להשתמש באיטרטור זה כדי לקבל את כל קבוצות ההתאמה ממחרוזת.
מה מייצג import.meta.url?
console.log(import.meta.url);בדוק את הסמנטיקה המדויקת של האופרטור ב-JavaScript. התשובה המפתה היא לעתים קרובות מה שתחביר ישן יותר היה עושה, לא מה שהתכונה הזו עושה.
import.meta הוא אובייקט המכיל מטא-דאטה על המודול הנוכחי. המאפיין import.meta.url מייצג את כתובת ה-URL של המודול הנוכחי, שניתן להשתמש בו כדי לקבל מידע על היכן הסקריפט רץ.
מה מספק WeakRef?
const obj = { data: 'important' };const ref = new WeakRef(obj);console.log(ref.deref());בדוק את הסמנטיקה המדויקת של האופרטור ב-JavaScript. התשובה המפתה היא לעתים קרובות מה שתחביר ישן יותר היה עושה, לא מה שהתכונה הזו עושה.
WeakRef מספקת הפניה חלשה לאובייקט, המאפשרת לאובייקט להיאסף על ידי איסוף הזבל אם אין הפניות אחרות. מכיוון ש- obj עדיין מופנה חזק כאן, deref() מחזירה את האובייקט המקורי. אם היעד היה נאסף, deref() הייתה מחזירה undefined.
