الرمز في جافا سكريبت

تعرف على الرموز: نوع البيانات الفريد لخصائص الكائن

في JavaScript ، تعتبر الرموز أنواع بيانات فريدة يمكن استخدامها لإنشاء معرفات لخصائص الكائن. الرموز ليست مثل السلاسل أو الأرقام ، ولا يمكن تحويلها إلى أنواع البيانات هذه. هذا ما يجعلها مثالية لإنشاء المعرفات.

استخدام الرموز في جافا سكريبت

عند إنشاء رمز ، يمكنك اختياريًا إعطائه وصفًا. هذا مفيد لتصحيح الأخطاء ، لكنه غير مطلوب.

إنشاء رمز بسيط.

const mySymbol = Symbol();

يمكنك أيضًا إنشاء رمز مع وصف.

const mySymbol = Symbol("my description");

إذا قمت بإنشاء رموز متعددة بنفس الوصف ، فستكون قيمًا مختلفة.

const sym1 = Symbol("foo");
const sym2 = Symbol("foo");

// false
console.log(sym1 === sym2);

ما الذي يجعل الرموز فريدة

غالبًا ما تستخدم الرموز كمعرفات لخصائص الكائن. وذلك لأن الرموز مضمونة لتكون فريدة ولا يتم تحويلها إلى سلاسل.

const obj = {};
obj[mySymbol] = "bar";

// "bar"
console.log(obj[mySymbol]);

يمكنك استخدام الرموز كمفاتيح لخصائص الكائن ، لكن لا يمكنك استخدامها كأسماء خصائص (مفاتيح) في JSON.

const sym = Symbol("foo");
const obj = { [sym]: "bar" };

// {}
console.log(JSON.stringify(obj));

الرموز غير قابلة للعد ، لذلك لن تظهر عند استخدام حلقة for-in على كائن.

const obj = {};
obj[Symbol("a")] = "a";
obj[Symbol("b")] = "b";

for (var key in obj) {
  // undefined
  console.log(key);
}

يمكنك استخدام Object.getOwnPropertySymbols للحصول على مصفوفة من جميع الرموز على كائن.

const obj = {};
obj[Symbol("a")] = "a";
obj[Symbol("b")] = "b";

const symbols = Object.getOwnPropertySymbols(obj);

// [Symbol(a), Symbol(b)]
console.log(symbols);

استخدام رمز كمكرر

يمكنك استخدام Symbol.iterator المشهور للحصول على رمز يمكن استخدامه كمكرر.

const arr = [1, 2, 3];
const it = arr[Symbol.iterator]();

// { value: 1, done: false }
console.log(it.next());

// { value: 2, done: false }
console.log(it.next());

// { value: 3, done: false }
console.log(it.next()); 

// { value: undefined, done: true }
console.log(it.next());

مثال أكثر واقعية

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

افترض أن لديك شيئًا يمثل شخصًا. تريد إضافة خاصية إلى هذا الكائن الذي يخزن سنة ميلاد الشخص ، لكنك لا تريد أن تكون هذه الخاصية قابلة للعد. يمكنك القيام بذلك برمز:

const person = {
  name: "John Doe"
};
const birthYear = Symbol("birth year");
person[birthYear] = "1955";

for (var key in person) {
  // name
  console.log(key); 
}

// 1955
console.log(person[birthYear]);