DanLevy.net

اختبار: الرموز والقابلة للتعداد

هل تعرف الميزات الأقل شهرة في ES2015؟

اختبار: واجهات JavaScript، الرموز، والقابلة للتعداد

كيف يجب أن تصل إلى خاصية كائن JavaScript تستخدم دالة getter؟

const obj = {
get val() {
return 'got it!';
}
};
console.log(obj.val);

في JavaScript، يمكن الوصول إلى getter كخاصية عادية. لا حاجة لاستدعائها كدالة. في هذا المثال، الوصول إلى obj.val مباشرة يستدعي دالة getter ويخرج got it!.

ما هي الطريقة الصحيحة لإنشاء مفتاح خاصية فريد حقًا لكائن JavaScript؟

const uniqueKey = Symbol('myUniqueKey');
const obj = {
[uniqueKey]: 'unique value'
};
console.log(obj[uniqueKey]);

الرموز (Symbols) هي نوع بدائي فريد وغير قابل للتغيير يمكن استخدامه كمفاتيح لخصائص الكائنات. يساعد ذلك في تجنب تضارب الأسماء، خاصة في قواعد الأكواد الكبيرة أو عند كتابة مكتبات قابلة لإعادة الاستخدام.

هل سيتم إدراج الخاصية age أثناء التكرار باستخدام for...in؟

const person = {};
Object.defineProperty(person, 'age', {
value: 25,
enumerable: true
});
for (let key in person) {
console.log(key);
}

تتحكم الخاصية enumerable في Object.defineProperty() في ما إذا كانت الخاصية ستظهر في طرق التعداد مثل for...in. في هذا المثال، بما أن enumerable: true، فإن الخاصية age سيتم إدراجها أثناء التكرار.

ما هو التعداد الافتراضي للخاصية عند استخدام Object.defineProperty() دون تحديد enumerable؟

const car = {};
Object.defineProperty(car, 'make', {
value: 'Toyota'
});
console.log(Object.keys(car));

عند استخدام Object.defineProperty() دون تحديد enumerable، تكون قيمته الافتراضية false. وهذا يعني أن الخاصية make لن تظهر في Object.keys() أو طرق التعداد الأخرى.

ماذا ستكون نتيجة المقارنة التالية؟

const sym1 = Symbol('id');
const sym2 = Symbol('id');
console.log(sym1 === sym2);

كل استدعاء لـ Symbol() ينشئ قيمة فريدة وغير قابلة للتغيير، حتى لو كان الوصف متطابقًا. في هذه الحالة، sym1 و sym2 هما رمزان مختلفان، لذا تعيد المقارنة false.

هل سيتم إدراج الخاصية ذات المفتاح Symbol أثناء تكرار for...in؟

const sym = Symbol('uniqueKey');
const obj = {
[sym]: 'symbol value',
regularKey: 'regular value'
};
for (let key in obj) {
console.log(key);
}

يمكن أن تحتوي الخصائص ذات المفاتيح Symbol على علم enumerable خاص بها، لكن for...in و Object.keys() تزور فقط الخصائص القابلة للتعداد ذات المفاتيح النصية. في هذا المثال، سيتم إدراج regularKey فقط، وليس الخاصية ذات المفتاح Symbol.

أي طريقة يمكن استخدامها لاسترداد جميع مفاتيح Symbol لكائن؟

تُستخدم طريقة Object.getOwnPropertySymbols() لاسترداد مفاتيح خاصية Symbol الخاصة بالكائن.

const sym1 = Symbol('id');
const sym2 = Symbol('name');
const obj = {
[sym1]: 'symbol value',
[sym2]: 'another symbol value'
};
console.log(Object.getOwnPropertySymbols(obj));
// [Symbol(id), Symbol(name)]