ØªÙØ®ÙزÙÙ٠اÙÙØµÙص ÙÙ JavaScript ÙØ³ÙØ§Ø³Ù ÙØµÙØ© Ø£Ù Ø³ÙØ§Ø³Ù ٠٠اÙÙ ØØ§Ø±Ù (string of charecter). ÙØ§ ÙÙØ¬Ø¯ ÙÙØ¹ Ø¨ÙØ§Ùات ٠ستÙÙ ÙÙØØ±Ù Ø§ÙÙØ§ØØ¯ (char).
Ø§ÙØµÙغة Ø§ÙØ¯Ø§Ø®ÙÙØ© ÙÙÙØµÙص ÙÙ Ø¯Ø§Ø¦Ù ÙØ§ UTF-16,ÙÙØ§ تÙÙ٠٠رتبطة بتشÙÙØ± Ø§ÙØµÙØØ©.
Ø¹ÙØ§Ù ات Ø§ÙØªÙØµÙØµ ââ
ÙÙØ±Ø§Ø¬Ø¹ Ø£ÙÙØ§Ø¹ Ø¹ÙØ§Ù ات Ø§ÙØªÙØµÙØµ (Ø§ÙØ§Ùتباس).
ÙÙ Ù٠تض٠Ù٠اÙÙØµÙص إ٠ا ÙÙ Ø¹ÙØ§Ù ات Ø§ÙØ§Ùتباس Ø§ÙØ£ØØ§Ø¯ÙØ©Ø Ø£Ù Ø§ÙØ«ÙØ§Ø¦ÙØ© أ٠اÙÙØ§ØµÙØ© Ø§ÙØ¹ÙÙØ§ اÙÙ Ø§Ø¦ÙØ©:
let single = 'single-quoted';
let double = "double-quoted";
let backticks = `backticks`;
Ø¹ÙØ§Ù
ات Ø§ÙØªÙØµÙØµ اÙÙØ±Ø¯ÙØ© ÙØ§ÙØ«ÙØ§Ø¦ÙØ© تÙÙÙ Ù
تÙ
Ø§Ø«ÙØ©. Ø£Ù
ا اÙÙØ§ØµÙØ© Ø§ÙØ¹ÙÙØ§ اÙÙ
Ø§Ø¦ÙØ©Ø ÙÙØªÙØªÙØ ÙÙØ§ تضÙ
ÙÙ Ø£Ù ØªØ¹Ø¨ÙØ± ÙÙ Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ©Ø Ø¹Ø¨Ø± تضÙ
ÙÙÙØ§ ÙÙ â${â¦}â:
function sum(a, b) {
return a + b;
}
alert(`1 + 2 = ${sum(1, 2)}.`); // 1 + 2 = 3.
اÙÙ ÙØ²Ø© Ø§ÙØ£Ø®Ø±Ù ÙØ§Ø³ØªØ®Ø¯Ø§Ù اÙÙØ§ØµÙØ© Ø§ÙØ¹ÙÙÙØ© اÙÙ Ø§Ø¦ÙØ© ÙÙ Ø¥Ù ÙØ§ÙÙØ© ÙØµÙ Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ© Ø¥Ù٠عدة أسطر:
let guestList = `Guests:
* John
* Pete
* Mary
`;
alert(guestList); // ÙØ§Ø¦Ù
Ø© Ø¨Ø§ÙØ¶ÙÙÙ Ù٠أسطر Ù
ÙÙØµÙØ©
ÙØ¨Ø¯Ù Ø§ÙØ£Ù ر Ø·Ø¨ÙØ¹ÙÙØ§ Ø£ÙÙØ³ ÙØ°ÙÙØ ÙÙÙ Ø¹ÙØ§Ù ات Ø§ÙØªÙØµÙØµ اÙÙØ±Ø¯ÙØ© ÙØ§ÙØ«ÙØ§Ø¦ÙØ© ÙØ§ ØªØ¹Ù Ù Ø¨ÙØ°Ù Ø§ÙØ·Ø±ÙÙØ©. Ø¥Ù ØØ§ÙÙÙØ§ Ø§Ø³ØªØ®Ø¯Ø§Ù ÙØ§ ÙÙ ÙØµ ٠تعدد Ø§ÙØ£Ø³Ø·Ø±Ø Ø³ÙØØµÙ Ø¹Ù٠خطأ:
let guestList = "Guests: // Error: Unexpected token ILLEGAL
* John";
Ø£ØªÙ Ø§Ø³ØªØ®Ø¯Ø§Ù Ø¹ÙØ§Ù ات Ø§ÙØ§Ùتباس اÙÙØ±Ø¯ÙØ© ÙØ§ÙØ«ÙØ§Ø¦ÙØ© Ù٠أÙÙØ§Øª Ù Ø¨ÙØ±Ø© Ù Ù Ø¥ÙØ´Ø§Ø¡ اÙÙØºØ©Ø Ø¹ÙØ¯Ù ا ÙÙ ÙÙØ¤Ø®Ùذ Ø¨Ø§ÙØØ³Ø¨Ø§Ù Ø§ÙØØ§Ø¬Ø© Ø¥ÙÙ ÙØµ ٠تعدد Ø§ÙØ£Ø³Ø·Ø±. Ø¸ÙØ±Øª اÙÙØ§ØµÙØ© Ø§ÙØ¹ÙÙÙØ© اÙÙ Ø§Ø¦ÙØ© Ù Ø¤Ø®Ø±ÙØ§ ÙÙØ°Ø§ ÙØ¥ÙÙØ§ ٠تعددة Ø§ÙØ§Ø³ØªØ¹Ù Ø§ÙØ§Øª.
Backticks also allow us to specify a âtemplate functionâ before the first backtick. The syntax is: func`string`. The function func is called automatically, receives the string and embedded expressions and can process them. This is called âtagged templatesâ. This feature makes it easier to implement custom templating, but is rarely used in practice. You can read more about it in the manual.
Ø§ÙØ±Ù ÙØ² Ø§ÙØ®Ø§ØµØ©
Ù
ا Ø²Ø§Ù Ø¨Ø§ÙØ¥Ù
ÙØ§Ù ÙØªØ§Ø¨Ø© ÙØµÙص Ù
تعددة Ø§ÙØ£Ø³Ø·Ø± باستخداÙ
Ø¹ÙØ§Ù
ات Ø§ÙØ§Ùتباس Ø§ÙØ£ØØ§Ø¯ÙØ© ÙØ§ÙØ«ÙØ§Ø¦ÙØ© باستخداÙ
Ù
ا ÙØ³Ù
٠ب âØ±Ù
ز Ø§ÙØ³Ø·Ø± Ø§ÙØ¬Ø¯ÙØ¯âØ ÙØ§Ùذ٠ÙÙÙØªÙب â\nØ ÙÙØ±Ù
ز ÙØ³Ø·Ø± Ø¬Ø¯ÙØ¯:
let guestList = "Guests:\n * John\n * Pete\n * Mary";
alert(guestList); // ÙØ§Ø¦Ù
Ø© Ù
تعددة Ø§ÙØ£Ø³Ø·Ø± Ø¨Ø§ÙØ¶ÙÙÙ
Ù Ø«ÙÙØ§Ø Ø§ÙØ³Ø·Ø±ÙÙ Ø§ÙØªØ§ÙÙÙÙ Ù ØªÙ Ø§Ø«ÙØ§ÙØ ÙÙÙÙ٠ا Ù ÙØªÙبÙ٠بطرÙÙØ© ٠ختÙÙØ©:
let str1 = "Hello\nWorld"; // سطرا٠باستخداÙ
"رÙ
ز Ø§ÙØ³Ø·Ø± Ø§ÙØ¬Ø¯Ùد"
// سطرا٠باستخداÙ
سطر Ø¬Ø¯ÙØ¯ Ø¹Ø§Ø¯Ù ÙØ§ÙÙÙØ§ØµÙ Ø§ÙØ¹ÙÙØ§ اÙÙ
Ø§Ø¦ÙØ©
let str2 = `Hello
World`;
alert(str1 == str2); // true
ÙÙØ¬Ø¯ Ø±Ù ÙØ² خاصة أخر٠أÙÙ Ø§ÙØªØ´Ø§Ø±Ùا.
ÙØ°Ù اÙÙØ§Ø¦Ù Ø© ÙØ§Ù ÙØ©:
| اÙÙ ØØ±Ù | اÙÙØµÙ |
|---|---|
â\n |
Ù ØØ±Ù Ø§ÙØ³Ø·Ø± Ø§ÙØ¬Ø¯Ùد (Line Feed). |
â\r |
Ù
ØØ±Ù Ø§ÙØ¹Ùدة Ø¥ÙÙ Ø¨Ø¯Ø§ÙØ© Ø§ÙØ³Ø·Ø± (Carriage Return)Ø ÙÙØ§ ÙØ³ØªØ®Ø¯Ù
بÙ
ÙØ±Ø¯Ù. تستخدÙ
Ù
ÙÙØ§Øª ÙÙÙØ¯Ùز اÙÙØµÙØ© ترÙÙØ¨Ø© Ù
٠رÙ
زÙÙ â\r\n ÙØªÙ
Ø«Ù٠سطر Ø¬Ø¯ÙØ¯. |
â'\ , "\ |
Ø¹ÙØ§Ù Ø© Ø§ÙØªØ¨Ø§Ø³ Ù Ø²Ø¯ÙØ¬Ø© ÙÙ ÙØ±Ø¯Ø©. |
\\ |
شرطة Ù Ø§Ø¦ÙØ© Ø®ÙÙÙØ© |
â\t |
Ù Ø³Ø§ÙØ© جدÙÙØ© âTabâ |
â\b, \f, \v |
ÙØ±Ø§Øº Ø®ÙÙÙ (backspace)Ø Ù ØØ±Ù Ø§ÙØ§ÙØªÙØ§Ù Ø¥ÙÙ ØµÙØØ© Ø¬Ø¯ÙØ¯ (Form Feed)Ø Ù Ø³Ø§ÙØ© جدÙÙØ© Ø£ÙÙÙØ© (Vertical Tab) عÙÙ Ø§ÙØªÙاÙÙ â ØªÙستع٠ÙÙ ÙÙØªÙاÙÙØ ÙÙ٠تعد ٠ستخد٠ة. |
â\xXX |
ØµÙØºØ© رÙ
ز ÙÙÙÙÙÙØ¯ Ù
ع عدد ست عشر٠Ù
ÙØ¹Ø·Ù XXØ Ù
ثاÙ: 'â \x7A' ÙÙ ÙÙØ³Ùا 'z'. |
â\uXXXX |
ØµÙØºØ© رÙ
ز ÙÙÙÙÙÙØ¯ Ù
ع عدد ست Ø¹Ø´Ø±ÙØ© XXXX Ù٠تشÙÙØ± UTF-16Ø Ù
Ø«ÙÙØ§Ø â\u00A9 â Ù٠اÙÙÙÙÙÙÙØ¯ ÙØ±Ù
ز ØÙÙ٠اÙÙØ³Ø® ©. ÙØ¬Ø¨ Ø£Ù ÙÙÙÙ Ù
ÙÙÙ Ù
Ù 6 Ø®Ø§ÙØ§Øª ست Ø¹Ø´Ø±ÙØ©. |
â\u{Xâ¦XXXXXX}â |
(1 Ø¥ÙÙ 6 Ø£ØØ±Ù ست Ø¹Ø´Ø±ÙØ©) ر٠ز ÙÙÙÙÙÙØ¯ ٠ع تشÙÙØ± UTF-32 اÙ٠عطÙ. ØªÙØ´ÙÙÙÙØ± بعض Ø§ÙØ±Ù ÙØ² Ø§ÙØ®Ø§ØµØ© بر٠ز٠ÙÙÙÙÙÙØ¯Ø ÙØªØ£Ø®Ø° 4 Ø¨Ø§ÙØª. ÙÙØ°Ø§ ÙÙ ÙÙÙØ§ إدخا٠شÙÙØ±Ø§Øª Ø·ÙÙÙØ©. |
| Character | Description |
|---|---|
\n |
New line |
\r |
Carriage return: not used alone. Windows text files use a combination of two characters \r\n to represent a line break. |
\', \" |
Quotes |
\\ |
Backslash |
\t |
Tab |
\b, \f, \v |
Backspace, Form Feed, Vertical Tab â kept for compatibility, not used nowadays. |
\xXX |
Unicode character with the given hexadecimal Unicode XX, e.g. '\x7A' is the same as 'z'. |
\uXXXX |
A Unicode symbol with the hex code XXXX in UTF-16 encoding, for instance \u00A9 â is a Unicode for the copyright symbol ©. It must be exactly 4 hex digits. |
\u{Xâ¦XXXXXX} (1 to 6 hex characters) |
A Unicode symbol with the given UTF-32 encoding. Some rare characters are encoded with two Unicode symbols, taking 4 bytes. This way we can insert long codes. |
Examples with Unicode:
alert( "\u00A9" ); // ©
alert( "\u{20331}" ); // 佫, a rare Chinese hieroglyph (long Unicode)
alert( "\u{1F60D}" ); // ð, a smiling face symbol (another long Unicode)
// (ر٠ز ÙØ§Ø¯Ø± ٠٠اÙÙÙØ±ÙغÙÙÙÙØ© Ø§ÙØµÙÙÙØ© (ÙÙÙÙÙÙØ¯ Ø·ÙÙÙ alert( â\u{20331}â ); // 佫
// (ر٠ز ÙØ¬Ù ٠بتس٠(ÙÙÙÙÙÙØ¯ Ø·ÙÙ٠آخر alert( â\u{1F60D}â ); // ð
ÙØ§ØØ¸ بدء جÙ
ÙØ¹ Ø§ÙØ±Ù
ÙØ² Ø§ÙØ®Ø§ØµØ© بشرطة Ù
Ø§Ø¦ÙØ© Ø®ÙÙÙØ© `\`. ØªØ¯Ø¹Ù Ø£ÙØ¶Ø§ ب "Ù
ØØ±Ù Ø§ÙØªÙØ±ÙØ¨" (escape character). ÙÙ
ÙÙÙØ§ استخداÙ
ÙØ§ Ø£ÙØ¶Ùا Ø¥Ù Ø£Ø±Ø¯ÙØ§ تضÙ
ÙÙ Ø¹ÙØ§Ù
Ø© Ø§ÙØªØ¨Ø§Ø³ Ù٠اÙÙØµ: Ù
Ø«ÙÙØ§:
```js run
alert( 'I\'m the Walrus!' ); // I'm the Walrus!
ÙØ¬Ø¨ Ø¥ÙØØ§Ù Ø¹ÙØ§Ù
Ø© Ø§ÙØ§Ùتباس Ø§ÙØ¯Ø§Ø®ÙÙØ© Ø¨Ø§ÙØ´Ø±Ø·Ø© اÙÙ
Ø§Ø¦ÙØ© Ø§ÙØ®ÙÙÙØ© â\'âØ ÙØ¥Ùا ÙØ³ØªÙØ¹ØªÙØ¨Ø± ÙÙØ§ÙØ© Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ©. ÙØ§ØØ¸ Ø£Ù Ø§ÙØ´Ø±Ø·Ø© اÙÙ
Ø§Ø¦ÙØ© Ø§ÙØ®ÙÙÙØ© \ تعÙ
Ù Ù
٠أج٠تصØÙØ ÙØ±Ø§Ø¡Ø© Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ© Ø¨ÙØ§Ø³Ø·Ø© JavaScript. ÙÙ
Ù Ø«Ù
تختÙÙØ ÙØ°Ø§ ÙØ¥Ù اÙÙØµ ÙÙ Ø§ÙØ°Ø§Ùرة ÙØ§ ÙØØªÙ٠عÙÙ \. ÙÙ
ÙÙÙØ§ Ø±Ø¤ÙØ© ذÙÙ Ø¨ÙØ¶ÙØ Ø¨Ø§Ø³ØªØ®Ø¯Ø§Ù
alert عÙ٠اÙÙ
Ø«Ø§Ù Ø§ÙØ³Ø§Ø¨Ù.
Of course, only the quotes that are the same as the enclosing ones need to be escaped. So, as a more elegant solution, we could switch to double quotes or backticks instead:
alert( `I'm the Walrus!` ); // I'm the Walrus!
ÙÙÙ Ù
اذا Ø¥Ù Ø£Ø±Ø¯ÙØ§ عرض شرطة Ù
Ø§Ø¦ÙØ© Ø®ÙÙÙØ© ضÙ
٠اÙÙØµØ ÙÙ
Ù٠ذÙÙØ ÙÙÙÙØ§ ÙØØªØ§Ø¬ Ø¥ÙÙ ØªÙØ±Ø§Ø±Ùا ÙÙØ°Ø§ \\:
alert( `The backslash: \\` ); // The backslash: \
Ø·Ù٠اÙÙØµ
تØÙ
Ù Ø§ÙØ®Ø§ØµÙØ© length Ø·Ù٠اÙÙØµ:
alert( `My\n`.length ); // 3
ÙØ§ØØ¸ Ø£Ù n\ Ù٠رÙ
ز Ø®Ø§ØµØ ÙØ°Ø§ ÙÙÙÙ Ø·ÙÙ Ø§ÙØ³ÙØ³ÙØ© اÙÙØ¹ÙÙ ÙÙ 3.
length ÙÙ Ø®Ø§ØµÙØ©ÙÙØ®Ø·Ùئ بعض Ø§ÙØ£Ø´Ø®Ø§Øµ ذÙÙ Ø§ÙØ®ÙÙÙØ§Øª Ø¨ÙØºØ§Øª برÙ
Ø¬ÙØ© Ø£Ø®Ø±Ù Ù ÙØ³ØªØ¯Ø¹ÙÙ str.length()â Ø¨Ø¯ÙÙØ§ Ù
٠استدعاء str.length ÙÙØ·. ÙØ°Ø§ ÙØ§ ÙØ¹Ù
Ù ÙØ°Ø§ Ø§ÙØªØ§Ø¨Ø¹ ÙØ¹Ø¯Ù
ÙØ¬ÙدÙ. ÙÙØ§ØØ¸ Ø£Ù str.length ÙÙ Ø®Ø§ØµÙØ© Ø¹Ø¯Ø¯ÙØ©Ø ÙÙÙØ³ ØªØ§Ø¨Ø¹ÙØ§ ÙÙØ§ ØØ§Ø¬Ø© ÙÙØ¶Ø¹ ÙÙØ³ÙÙ Ø¨Ø¹Ø¯ÙØ§.
اÙÙØµÙ٠إÙÙ Ù ØØ§Ø±Ù Ø³ÙØ³ÙØ©
ÙÙØØµÙ٠عÙÙ ØØ±Ù ÙÙ Ù
ÙØ§Ù Ù
عÙÙ Ù
Ù Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ© posØ Ø§Ø³ØªØ®Ø¯Ù
Ø§ÙØ£ÙÙØ§Ø³ اÙÙ
عÙÙÙØ© [pos] Ø£Ù Ø§Ø³ØªØ¯Ø¹Ù Ø§ÙØªØ§Ø¨Ø¹ str.charAt(pos). ÙØ¨Ø¯Ø£ Ø£ÙÙ ØØ±Ù Ù٠اÙÙ
ÙØ¶Ø¹ رÙÙ
ØµÙØ±:
let str = `Hello`;
// the first character
alert( str[0] ); // H
alert( str.charAt(0) ); // H
// the last character
alert( str[str.length - 1] ); // o
Ø§ÙØ£ÙÙØ§Ø³ اÙÙ
عÙÙÙØ© Ù٠طرÙÙØ© Ø¬Ø¯ÙØ¯Ø© ÙÙØØµÙ٠عÙÙ ØØ±ÙØ Ø¨ÙÙÙ
ا Ø§ÙØªØ§Ø¨Ø¹ charAt Ù
ÙØ¬Ùد ÙØ£Ø³Ø¨Ø§Ø¨ ØªØ§Ø±ÙØ®ÙØ©. Ø§ÙØ§Ø®ØªÙا٠اÙÙØÙØ¯ بÙÙÙÙ
ا Ù٠إ٠ÙÙ
تجد Ø§ÙØ£ÙÙØ§Ø³ اÙÙ
ربعة [] Ø§ÙØØ±Ù ØªÙØ±Ø¬Ùع اÙÙÙÙ
Ø© undefined بÙÙÙ
ا ÙÙØ±Ø¬Ùع charAt ÙØµÙا ÙØ§Ø±ØºÙا:
let str = `Hello`;
alert( str[1000] ); // undefined
alert( str.charAt(1000) ); // '' (Ø³ÙØ³ÙØ© ÙØµÙØ© ÙØ§Ø±Øº)
ÙÙ
ÙÙÙØ§ Ø£ÙØ¶Ø§ Ø§ÙØªÙÙÙ Ø®ÙØ§Ù جÙ
ÙØ¹ Ù
ØØ§Ø±Ù Ø³ÙØ³ÙØ© باستخداÙ
for..of:
for (let char of "Hello") {
alert(char); // H,e,l,l,o (char becomes "H", then "e", then "l" etc)
}
اÙÙØµÙص ثابتة
ÙØ§ ÙÙ Ù٠تغÙÙØ± اÙÙØµÙص ÙÙ JavaScriptØ Ù٠٠اÙ٠ستØÙ٠تغÙÙØ± ØØ±Ù Ø¯Ø§Ø®Ù Ø³ÙØ³ÙØ© ÙØµÙØ© ÙÙØ·. ÙÙØ¬Ø±Ø¨ Ø§ÙØ£Ù ر ÙÙØªØ£Ùد ٠٠أÙÙ ÙÙ ÙØ¹Ù Ù:
let str = 'Hi';
str[0] = 'h'; // خطأ
alert( str[0] ); // ÙØ§ تعÙ
Ù
Ø§ÙØ·Ø±ÙÙØ© اÙÙ
عتادة ÙÙ Ø¥ÙØ´Ø§Ø¡ ÙØµ Ø¬Ø¯ÙØ¯ ÙØ¥Ø³Ùاد٠ÙÙÙ
ØªØºÙØ± str بدÙÙØ§ Ù
٠اÙÙØµ Ø§ÙØ³Ø§Ø¨Ù. Ù
Ø«ÙÙØ§:
let str = 'Hi';
str = 'h' + str[1]; // ØªØ³ØªØ¨Ø¯Ù ÙØ§Ù
Ù Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ©
alert( str ); // hi
Ø³ÙØ±Ù اÙÙ Ø²ÙØ¯ Ù Ù Ø§ÙØ£Ù Ø«ÙØ© ع٠ذÙÙ ÙÙ Ø§ÙØ£Ø¬Ø²Ø§Ø¡ Ø§ÙØªØ§ÙÙØ©.
تغÙÙØ± ØØ§ÙØ© Ø§ÙØ£ØØ±Ù Ø§ÙØ£Ø¬ÙØ¨ÙØ©
ÙÙÙÙ Ø§ÙØªØ§Ø¨Ø¹ toLowerCase() ÙØ§Ùتابع toUpperCase() Ø¨ÙØªØºÙÙØ± ØØ§ÙØ© Ø§ÙØ£ØØ±Ù Ø§ÙØ£Ø¬ÙØ¨ÙØ©:
alert( 'Interface'.toUpperCase() ); // INTERFACE
alert( 'Interface'.toLowerCase() ); // interface
Ø£Ù Ø¥Ù Ø£Ø±Ø¯ÙØ§ بتغÙÙØ± ØØ§ÙØ© ØØ±Ù ÙØ§ØØ¯ ÙÙØ·:
alert( 'Interface'[0].toLowerCase() ); // 'i'
Ø§ÙØ¨ØØ« ع٠جزء ٠٠اÙÙØµ
ÙÙØ¬Ø¯ Ø§ÙØ¹Ø¯Ùد Ù Ù Ø§ÙØ·Ø±Ù ÙÙØ¨ØØ« ع٠جزء ٠٠اÙÙØµ Ø¶Ù Ù Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ©.
str.indexOf
Ø§ÙØªØ§Ø¨Ø¹ Ø§ÙØ£ÙÙ ÙÙ str.indexOf(substr, pos).
ÙØ¨ØØ« Ø§ÙØªØ§Ø¨Ø¹ ع٠substr ÙÙ str Ø¨Ø¯Ø¡ÙØ§ Ù
٠اÙÙ
ÙØ¶Ø¹ اÙÙ
ØØ¯Ø¯ posØ Ø«Ù
ÙÙØ±Ø¬Ùع اÙÙ
ÙØ¶Ø¹ Ø§ÙØ°Ù تطاب٠Ù
ع اÙÙØµ Ø£Ù ÙÙØ±Ø¬Ùع â -1 Ø¥Ù ÙÙ
تعثر عÙ٠تطابÙ. Ù
Ø«ÙÙØ§:
let str = 'Widget with id';
alert( str.indexOf('Widget') ); // 0, because 'Widget' is found at the beginning
alert( str.indexOf('widget') ); // -1, not found, the search is case-sensitive
alert( str.indexOf("id") ); // 1, "id" is found at the position 1 (..idget with id)
The optional second parameter allows us to start searching from a given position.
For instance, the first occurrence of "id" is at position 1. To look for the next occurrence, letâs start the search from position 2:
let str = 'Widget with id';
alert( str.indexOf('id', 2) ) // 12
Ø¥Ù ÙÙØª Ù
ÙØªÙ
ÙØ§ بجÙ
ÙØ¹ اÙÙ
ÙØ§Ø¶Ø¹ Ø§ÙØªÙ ÙØ¸Ùر ÙÙÙØ§ ÙØµ Ù
عÙÙØ ÙÙ
ÙÙ٠استخداÙ
indexOf ÙÙ ØÙÙØ©. ÙØªÙ
Ù٠استدعاء Ø¬Ø¯ÙØ¯ Ù
٠اÙÙ
ÙØ¶Ùع Ø§ÙØªØ§ÙÙ ÙÙÙÙ
ÙØ¶Ø¹ Ø§ÙØ³Ø§Ø¨Ù Ø§ÙØ°Ù تطاب٠Ù
ع اÙÙØµ:
let str = 'As sly as a fox, as strong as an ox';
let target = 'as'; // let's look for it
let pos = 0;
while (true) {
let foundPos = str.indexOf(target, pos);
if (foundPos == -1) break;
alert( `Found at ${foundPos}` );
pos = foundPos + 1; // continue the search from the next position
}
ÙÙ ÙÙ ØªÙØµÙر Ø§ÙØ®ÙØ§Ø±Ø²Ù ÙØ©:
let str = "As sly as a fox, as strong as an ox";
let target = "as";
let pos = -1;
while ((pos = str.indexOf(target, pos + 1)) != -1) {
alert( pos );
}
str.lastIndexOf(substr, position)ÙÙØ¬Ø¯ Ø£ÙØ¶Ùا تابع ٠شاب٠str.lastIndexOf(substr, position) ÙØ§ÙØ°Ù ÙØ¨Ø¯Ø£ Ø§ÙØ¨ØØ« Ù Ù ÙÙØ§ÙØ© Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ© ØØªÙ Ø¨Ø¯Ø§ÙØªÙا. أ٠أÙÙ ÙØ¹Ùد Ù ÙØ¶Ø¹ ظÙÙØ± اÙÙØµ اÙ٠بØÙØ« عÙÙ Ø§ÙØ·ÙاÙÙØ§ Ù Ù ÙÙØ§ÙØ© Ø§ÙØ³ÙØ³ÙØ©.
ÙÙØ¬Ø¯ Ø®ÙÙ Ø·ÙÙÙ Ø¹ÙØ¯ استخداÙ
indexOf ÙÙ if. ÙÙØ§ ÙÙ
ÙÙ ÙØ¶Ø¹Ùا بداخ٠if Ø¨Ø§ÙØ·Ø±ÙÙØ© Ø§ÙØªØ§ÙÙØ©:
let str = "Widget with id";
if (str.indexOf("Widget")) {
alert("We found it"); // ÙØ§ تعÙ
Ù!
}
ÙØ§ ÙØªØÙÙ Ø§ÙØ´Ø±Ø· Ù٠اÙÙ
Ø«Ø§Ù Ø§ÙØ³Ø§Ø¨Ù ÙØ£Ù str.indexOf("Widget")â ÙÙØ±Ø¬Ùع 0 (Ù
ا ÙØ¹ÙÙ ÙØ¬Ùد تطاب٠Ù٠اÙÙ
ÙØ¶Ø¹ Ø§ÙØ£ÙÙ) رغÙ
Ø¹Ø«ÙØ± Ø§ÙØªØ§Ø¨Ø¹ عÙ٠اÙÙÙÙ
Ø©Ø ÙÙÙ if تعد اÙÙÙÙ
Ø© 0 عÙ٠أÙÙØ§ false. ÙØ°Ø§ ÙØ¬Ø¨ Ø£Ù ÙÙØØµ عدÙ
ÙØ¬Ùد اÙÙÙÙ
Ø© -â 1 ÙÙØ°Ø§:
let str = "Widget with id";
if (str.indexOf("Widget") != -1) {
alert("We found it"); // works now!
}
The bitwise NOT trick
One of the old tricks used here is the bitwise NOT ~ operator. It converts the number to a 32-bit integer (removes the decimal part if exists) and then reverses all bits in its binary representation.
In practice, that means a simple thing: for 32-bit integers ~n equals -(n+1).
Ø¥ØØ¯Ù Ø§ÙØ®Ø¯Ø¹ اÙÙØ¯ÙÙ
Ø© ÙÙ ÙØ¹Ø§Ù
Ù Ø§ÙØ«Ùائ٠~ Ø§ÙØ°Ù تعÙ
٠عÙÙ Ù
ستÙÙ Ø§ÙØ¨Ùت. ÙÙÙ ÙÙØÙÙÙÙÙ Ø§ÙØ¹Ø¯Ø¯ Ø¥Ù٠عدد صØÙØ Ø¨ØµÙØºØ© 32-Ø¨ÙØª (ÙØØ°Ù Ø§ÙØ¬Ø²Ø¡ Ø§ÙØ¹Ø´Ø±Ù Ø¥Ù ÙØ¬Ø¯) Ø«Ù
ÙÙØÙÙÙ٠جÙ
ÙØ¹ Ø§ÙØ¨ØªØ§Øª Ø¥Ù٠تÙ
Ø«ÙÙÙØ§ Ø§ÙØ«ÙائÙ. عÙ
ÙÙÙØ§Ø ÙØ¹Ù٠ذÙÙ Ø´ÙØ¦Ùا Ø¨Ø³ÙØ·Ùا: باÙÙØ³Ø¨Ø© ÙÙØ£Ø¹Ø¯Ø§Ø¯ Ø§ÙØµØÙØØ© Ø¨ØµÙØºØ© 32-Ø¨ÙØª â~n تساÙÙ â-(n+1)â. Ù
Ø«ÙÙØ§:
alert( ~2 ); // -3, the same as -(2+1)
alert( ~1 ); // -2, the same as -(1+1)
alert( ~0 ); // -1, the same as -(0+1)
alert( ~-1 ); // 0, the same as -(-1+1)
ÙÙ
ا ÙØ±ÙØ ÙÙÙÙ â~ân ØµÙØ±Ùا ÙÙØ· Ø¹ÙØ¯Ù
ا تÙÙÙ n == -1 (ÙØ°ÙÙ ÙØ£Ù عدد صØÙØ n ذ٠إشارة). ÙØ°Ø§Ø ÙÙÙÙ ÙØ§ØªØ¬ اÙÙØØµ if ( ~str.indexOf("...") )â ØµØÙØÙا إذا ÙØ§Ùت ÙØªÙجة indexOf ÙØ§ تساÙÙ â-1. بÙ
عÙ٠آخر تÙÙ٠اÙÙÙÙ
Ø© true إذا ÙÙØ¬Ùد تطابÙ.
Ø§ÙØ¢ÙØ ÙÙ
Ù٠استخداÙ
ÙØ°Ù Ø§ÙØÙÙØ© ÙØªÙØµÙØ± اÙÙØØµ باستخداÙ
indexOf:
let str = "Widget";
if (~str.indexOf("Widget")) {
alert( 'Found it!' ); // works
}
ÙØ§ ÙÙÙ٠٠٠اÙÙ Ø³ØªØØ³Ù ØºØ§ÙØ¨Ùا Ø§Ø³ØªØ®Ø¯Ø§Ù Ù ÙØ²Ø§Øª اÙÙØºØ© بطرÙÙØ© ØºÙØ± ÙØ§Ø¶ØØ©Ø ÙÙÙ ÙØ°Ù Ø§ÙØÙÙØ© ØªÙØ³ØªØ®Ø¯Ù Ø¨ÙØ«Ø±Ø© ÙÙ Ø§ÙØ´ÙÙØ±Ø§Øª اÙÙØ¯ÙÙ Ø©Ø ÙØ°Ø§ ÙØ¬Ø¨ Ø£Ù ÙÙÙÙ ÙØ§.
ØªØ°ÙØ± Ø£Ù Ø§ÙØ´Ø±Ø· if (~str.indexOf(...))â ÙØ¹Ù
Ù Ø¨Ø§ÙØµÙغة «إ٠ÙÙØ¬Ùد».
To be precise though, as big numbers are truncated to 32 bits by ~ operator, there exist other numbers that give 0, the smallest is ~4294967295=0. That makes such check correct only if a string is not that long.
ÙØ§ ÙØ¬Ø¯ ÙØ°Ù Ø§ÙØ®Ø¯Ø¹Ø© ØØ§ÙÙÙØ§ سÙÙ ÙÙ Ø§ÙØ´ÙÙØ±Ø§Øª اÙÙØ¯ÙÙ
Ø©Ø ÙØ°ÙÙ ÙØ£Ù JavaScript ÙÙØ±Øª Ø§ÙØªØ§Ø¨Ø¹ â.includes (Ø³ØªØ¬Ø¯ÙØ§ ÙÙ Ø§ÙØ£Ø³ÙÙ).
includes, startsWith, endsWith
ÙÙØ±Ø¬Ùع Ø§ÙØªØ§Ø¨Ø¹ Ø§ÙØ£ØØ¯Ø« str.includes(substr, pos) اÙÙÙÙ
Ø© اÙÙ
ÙØ·ÙÙØ© true Ø£Ù false ÙÙÙÙØ§ ÙÙ
ا Ø¥Ù ÙØ§Ùت Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ© str ØªØØªÙ٠عÙÙ Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ© اÙÙØ±Ø¹ÙØ© substr. ÙØ°Ù ÙÙ Ø§ÙØ·Ø±ÙÙØ© Ø§ÙØµØÙØØ© ÙÙ ØØ§Ù Ø£Ø±Ø¯ÙØ§ Ø§ÙØªØ£Ùد Ù
Ù ÙØ¬Ùد تطاب٠جزء Ù
Ù Ø³ÙØ³ÙØ© ضÙ
Ù Ø³ÙØ³ÙØ© Ø£Ø®Ø±ÙØ ÙÙØ§ ÙÙÙ
ÙØ§ Ù
ÙØ¶Ø¹Ù:
alert( "Widget with id".includes("Widget") ); // true
alert( "Hello".includes("Bye") ); // false
اÙÙ
ÙØ¹Ø§Ù
ÙÙ Ø§ÙØ«Ø§ÙÙ Ø§ÙØ§Ø®ØªÙار٠ÙÙØªØ§Ø¨Ø¹ str.includes Ù٠اÙÙ
ÙØ¶Ø¹ اÙÙ
راد بدء Ø§ÙØ¨ØØ« Ù
ÙÙ:
alert( "Widget".includes("id") ); // true
alert( "Widget".includes("id", 3) ); // false, from position 3 there is no "id"
ÙØ¹Ù Ù Ø§ÙØªØ§Ø¨Ø¹Ø§Ù str.startsWith Ù str.endsWith ب٠ا ÙÙ ÙØ§Ø¶Ø Ù Ù Ù Ø³Ù ÙØ§ØªÙÙ Ø§Ø âØ³ÙØ³ÙØ© ÙØµÙØ© تبدأ بÙâØ Ù âØ³ÙØ³ÙØ© ÙØµÙØ© ØªÙØªÙ٠بÙâ Ø¹ÙÙ Ø§ÙØªÙاÙÙ:
alert( "Widget".startsWith("Wid") ); // true, "Widget" starts with "Wid"
alert( "Widget".endsWith("get") ); // true, "Widget" ends with "get"
Ø¬ÙØ¨ جزء Ù Ù ÙØµ
There are 3 methods in JavaScript to get a substring: substring, substr and slice.
str.slice(start [, end])â
ÙÙØ±Ø¬Ùع Ø¬Ø²Ø¡ÙØ§ Ù
٠اÙÙØµ Ø¨Ø¯Ø¡ÙØ§ Ù
٠اÙÙ
ÙØ¶Ø¹ start ÙØØªÙ Ø§ÙÙ
ÙØ¶Ø¹ end (بÙ
ا ÙØ§ ÙØªØ¶Ù
Ù end).
Ù
Ø«ÙÙØ§:
```js run
let str = "stringify";
alert( str.slice(0, 5) ); // 'strin', the substring from 0 to 5 (not including 5)
alert( str.slice(0, 1) ); // 's', from 0 to 1, but not including 1, so only character at 0
```
Ø¥Ù ÙÙ
ÙÙÙ ÙÙØ§Ù Ù
ÙØ¹Ø§Ù
٠ثاÙÙØ ÙØ³ÙÙØªØ·Ø¹ Ø§ÙØªØ§Ø¨Ø¹`slice` Ø§ÙØ¬Ø²Ø¡ اÙÙ
ØØ¯Ø¯ Ù
٠اÙÙ
ÙØ¶Ø¹ `start` ÙØØªÙ ÙÙØ§ÙØ© اÙÙØµ:
```js run
let str = "st*!*ringify*/!*";
alert( str.slice(2) ); // 'ringify', from the 2nd position till the end
```
ÙÙ
ÙÙ Ø£ÙØ¶Ùا استخداÙ
عدد Ø³Ø§ÙØ¨Ùا Ù
ع `start` Ø£Ù `end`Ø ÙØ°ÙÙ ÙØ¹Ù٠أ٠اÙÙ
ÙØ¶Ø¹ ÙÙØØ³ÙØ¨ Ø¨Ø¯Ø¡ÙØ§ Ù
Ù ÙÙØ§ÙØ© Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ©:
```js run
let str = "strin*!*gif*/!*y";
// start at the 4th position from the right, end at the 1st from the right
alert( str.slice(-4, -1) ); // 'gif'
```
str.substring(start [, end])â
ÙÙØ±Ø¬Ùع ÙØ°Ø§ Ø§ÙØªØ§Ø¨Ø¹ Ø¬Ø²Ø¡ÙØ§ Ù
٠اÙÙØµ اÙÙØ§Ùع بÙ٠اÙÙ
ÙØ¶Ø¹ start ÙØ§ÙÙ
ÙØ¶Ø¹ end.
`. ÙØ´Ø¨Ù ÙØ°Ø§ Ø§ÙØªØ§Ø¨Ø¹ ØªÙØ±ÙØ¨ÙØ§ Ø§ÙØªØ§Ø¨Ø¹ `slice`Ø ÙÙÙÙ ÙØ³Ù
Ø Ø¨ÙÙ٠اÙÙ
عاÙ
Ù `start` Ø£ÙØ¨Ø± Ù
Ù `end`.
Ù
Ø«ÙÙØ§:
```js run
let str = "stringify";
// substring Ø§ÙØ£Ù
رÙÙ Ø§ÙØªØ§ÙÙÙÙ Ù
تÙ
اثÙÙ٠باÙÙØ³Ø¨Ø© ÙÙ
alert( str.substring(2, 6) ); // "ring"
alert( str.substring(6, 2) ); // "ring"
// slice ÙÙÙ ÙÙØ³ Ù
ع
alert( str.slice(2, 6) ); // "ring" (ÙÙØ³ اÙÙØªÙجة Ø§ÙØ³Ø§Ø¨ÙØ©)
alert( str.slice(6, 2) ); // "" (ÙØµ ÙØ§Ø±Øº)
```
Ø¨Ø¹ÙØ³ `slice`Ø Ø§ÙÙÙÙ
Ø§ÙØ³Ø§Ùبة ØºÙØ± Ù
دعÙÙ
Ø© ضÙ
٠اÙÙ
عاÙ
ÙØ§ØªØ ÙØªÙÙÙÙÙ
Ø¥ÙÙ `0` Ø¥Ù Ù
ÙØ±ÙÙØ±Øª Ø¥ÙÙÙ.
str.substr(start [, length])â
ÙÙØ±Ø¬Ùع ÙØ°Ø§ Ø§ÙØªØ§Ø¨Ø¹ Ø§ÙØ¬Ø²Ø¡ اÙÙ
Ø·ÙÙØ¨ Ù
٠اÙÙØµØ Ø¨Ø¯Ø¡ÙØ§ Ù
Ù start ÙØ¨Ø§ÙØ·ÙÙ length اÙÙ
ÙØ¹Ø·Ù
Ø¨Ø¹ÙØ³ Ø§ÙØªÙابع Ø§ÙØ³Ø§Ø¨ÙØ©Ø ÙØªÙØ ÙÙØ§ ÙØ°Ø§ Ø§ÙØªØ§Ø¨Ø¹ ØªØØ¯Ùد Ø·Ù٠اÙÙØµ اÙÙ
Ø·ÙÙØ¨ بدÙÙØ§ Ù
Ù Ù
ÙØ¶Ø¹ ÙÙØ§ÙتÙ:
```js run
let str = "stringify";
// خذ 4 Ø£ØØ±Ù Ù
٠اÙÙ
ÙØ¶Ø¹ 2
alert( str.substr(2, 4) ); // ring
```
ÙÙ
Ù٠أ٠ÙÙÙ٠اÙÙ
ÙØ¹Ø§Ù
ÙÙ Ø§ÙØ£ÙÙ Ø³Ø§ÙØ¨Ùا ÙØªØØ¯Ùد اÙÙ
ÙØ¶Ø¹ Ø¨Ø¯Ø¡ÙØ§ Ù
٠اÙÙÙØ§ÙØ©:
```js run
let str = "strin*!*gi*/!*fy";
alert( str.substr(-4, 2) ); // ØØ±ÙÙÙ Ø§Ø¨ØªØ¯Ø§Ø¡ÙØ§ Ù
٠اÙÙ
ÙØ¶Ø¹ Ø§ÙØ±Ø§Ø¨Ø¹
```
ÙÙÙÙÙÙØ®ÙÙØµ ÙØ°Ù Ø§ÙØªÙابع ÙØªØ¬Ùب Ø§ÙØ®ÙØ· بÙÙÙØ§:
| Ø§ÙØªØ§Ø¨Ø¹ | ÙÙØªØ·Ø¹ ⦠| اÙÙ ÙØ§Ø¶Ø¹ Ø§ÙØ³Ø§Ùبة |
|---|---|---|
slice(start, end)â |
Ù
٠اÙÙ
ÙØ¶Ø¹ start Ø¥Ù٠اÙÙ
ÙØ¶Ø¹ end (بÙ
ا ÙØ§ ÙØªØ¶Ù
Ù end) |
Ù Ø³Ù ÙØØ© ÙÙÙØ§ اÙ٠عا٠ÙÙÙ |
substring(start, end)â |
Ù
ا بÙ٠اÙÙ
ÙØ¶Ø¹ start ÙØ§ÙÙ
ÙØ¶Ø¹ end |
ØºÙØ± Ù
سÙ
ÙØØ© ÙØªØµØ¨Ø 0 |
substr(start, length)â |
أرجع Ø§ÙØ£ØØ±Ù بطÙÙ length Ø¨Ø¯Ø¡ÙØ§ Ù
Ù start |
Ù
سÙ
ÙØØ© ÙÙÙ
عاÙ
Ù start |
ÙÙ
ÙÙ ÙØ¬Ù
ÙØ¹ Ø§ÙØªÙابع تÙÙÙØ° Ø§ÙØºØ±Ø¶ اÙÙ
Ø·ÙÙØ¨. ÙØ¯Ù Ø§ÙØªØ§Ø¨Ø¹ substr ÙØµÙر Ø¨Ø³ÙØ· رسÙ
ÙÙØ§: ÙÙÙ ØºÙØ± ذÙÙØ±Ø© ÙÙ ØªÙØ«ÙÙ JavaScript Ø§ÙØ±Ø³Ù
ÙØ ب٠ÙÙ Annex B ÙØ§ÙØ°Ù ÙØºØ·Ù Ù
ÙØ²Ø§Øª Ù
دعÙÙ
Ø© Ù٠اÙÙ
ØªØµÙØØ§Øª ÙÙØ· ÙØ£Ø³Ø¨Ø§Ø¨ ØªØ§Ø±ÙØ®ÙØ©Ø ÙØ°Ø§ ÙØ¥Ù Ø£Ù Ø¨ÙØ¦Ø© ÙØ§ تعÙ
٠عÙ٠اÙÙ
ØªØµÙØ Ø³ØªÙØ´Ù Ù٠دعÙ
ÙØ°Ø§ Ø§ÙØªØ§Ø¨Ø¹Ø ÙÙÙÙ ÙØ¹Ù
٠عÙ
ÙÙÙØ§ ÙÙ ÙÙ Ù
ÙØ§Ù.
Ù
ا بÙÙ Ø§ÙØ®ÙارÙÙ Ø§ÙØ¢Ø®Ø±ÙÙØ slice ÙÙ Ø£ÙØ«Ø± Ù
رÙÙØ©Ø ÙÙÙ ÙØ³Ù
Ø Ø¨ØªÙ
Ø±ÙØ± Ù
ÙØ¹Ø§Ù
ÙÙØ§Øª Ø³Ø§ÙØ¨Ø© ÙÙ
ا Ø£ÙÙ Ø£ÙØµØ± Ù٠اÙÙØªØ§Ø¨Ø©. ÙØ°Ø§Ø Ù
٠اÙÙØ§ÙÙ ØªØ°ÙØ± slice ÙÙØ· Ù
Ù ÙØ°Ù Ø§ÙØªÙابع Ø§ÙØ«Ùاث.
Ù ÙØ§Ø²ÙØ© اÙÙØµÙص
ØªÙØ§Ø²Ù Ø§ÙØ³Ùاس٠اÙÙØµÙØ© ØØ±ÙÙØ§ ØØ±ÙÙØ§ Ø¨ØªØ±ØªÙØ¨ أبجد٠Ù٠ا عرÙÙØ§ ÙÙ ÙØµÙ اÙÙ ÙØ§Ø±Ùات, strings are compared character-by-character in alphabetical order.
Ø¨Ø§ÙØ±ØºÙ ٠٠ذÙÙØ ÙÙØ¬Ø¯ بعض Ø§ÙØØ§ÙØ§Øª Ø§ÙØ´Ø§Ø°Ø©.
1- Ø§ÙØØ±Ù Ø§ÙØ£Ø¬ÙØ¨Ù Ø§ÙØµØºÙر دائ٠ا Ø£ÙØ¨Ø± Ù Ù Ø§ÙØØ±Ù Ø§ÙÙØ¨Ùر:
```js run
alert( 'a' > 'Z' ); // true
```
2- Ø§ÙØ£ØØ±Ù اÙÙ ÙØ´ÙÙÙÙÙØ© خارج اÙÙØ·Ø§Ù:
```js run
alert( 'Ãsterreich' > 'Zealand' ); // true
```
ÙØ¯ ÙÙÙØ¯ ذÙ٠إÙÙ ÙØªØ§Ø¦Ø¬ ØºØ±ÙØ¨Ø© Ø¥Ù Ø±ØªØ¨ÙØ§ Ù
Ø«ÙÙØ§ بÙ٠أسÙ
اء Ø¨ÙØ¯Ø§ÙØ ÙÙØªÙÙØ¹ اÙÙØ§Ø³ دائÙ
ÙØ§ Ø£Ù Zealand تأت٠بعد Ãsterreich Ù٠اÙÙØ§Ø¦Ù
Ø© ÙØ£Ù تÙÙØ³ ØªØ£ØªÙ ÙØ¨Ù Ø³ÙØ±Ùا ÙÙÙØ°Ø§. ÙÙÙÙ
Ù
ا ÙØØ¯Ø«Ø ÙÙØ±Ø§Ø¬Ø¹ تÙ
Ø«Ù٠اÙÙØµÙص Ø§ÙØ¯Ø§Ø®ÙÙ ÙÙ JavaScript.
Ø¬Ù ÙØ¹ اÙÙØµÙص Ù Ø´ÙØ±Ø© باستخدا٠UTF-16. ÙØ¹Ù٠أÙ: ÙÙÙ ØØ±Ù ر٠ز Ø¹Ø¯Ø¯Ù Ù ÙØ§Ø¨Ù ÙÙ. ÙÙØ¬Ø¯ Ø¯ÙØ§Ù خاصة ØªØ³Ù Ø Ø¨Ø§ÙØØµÙ٠عÙÙ Ø§ÙØØ±Ù Ù Ù Ø±Ù Ø²Ù ÙØ§ÙØ¹ÙØ³.
str.codePointAt(pos)â
ÙÙØ±Ø¬Ùع ÙØ°Ø§ Ø§ÙØªØ§Ø¨Ø¹ Ø§ÙØ±Ù
ز Ø§ÙØ¹Ø¯Ø¯Ù Ø§ÙØ®Ø§Øµ Ø¨Ø§ÙØØ±Ù Ø§ÙÙ
عط٠Ù٠اÙÙ
ÙØ¶Ø¹ pos:
```js run
// ÙØ¯Ù Ø§ÙØ£ØØ±Ù اÙÙ
ختÙÙØ© ÙÙ Ø§ÙØØ§ÙØ© رÙ
ÙØ² Ù
ختÙÙØ©
alert( "z".codePointAt(0) ); // 122
alert( "Z".codePointAt(0) ); // 90
```
String.fromCodePoint(code)â
ÙÙÙØ´Ùئ ØØ±ÙÙØ§ Ù
٠رÙ
Ø²Ù Ø§ÙØ¹Ø¯Ø¯Ù code:
```js run
alert( String.fromCodePoint(90) ); // Z
```
We can also add Unicode characters by their codes using `\u` followed by the hex code:
```js run
// ÙÙÙ
Ø«ÙÙÙ Ø§ÙØ¹Ø¯Ø¯ Ø§ÙØ¹Ø´Ø±Ù 90 Ø¨Ø§ÙØ¹Ø¯Ø¯ 5a Ù٠اÙÙØ¸Ø§Ù
Ø§ÙØ³Øª عشرÙ.
alert( '\u005a' ); // Z
```
ÙÙØ±Ù Ø§ÙØ¢Ù Ø§ÙØ£ØØ±Ù ذات Ø§ÙØ±Ù
ÙØ² 65..220 (Ø§ÙØ£ØØ±Ù اÙÙØ§ØªÙÙÙØ© ÙØ£Ø´Ùاء إضاÙÙØ©) عبر Ø¥ÙØ´Ø§Ø¡ ÙØµÙص Ù
ÙÙØ§:
let str = '';
for (let i = 65; i <= 220; i++) {
str += String.fromCodePoint(i);
}
alert( str );
// ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÂÂÂÂÂ
// ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÃÃÃÃÃÃ
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
تبدأ Ø§ÙØ£ØØ±Ù اÙÙØ¨Ùرة ÙÙ
ا ØªØ±ÙØ Ø«Ù
Ø£ØØ±Ù Ø®Ø§ØµØ©Ø Ø«Ù
Ø§ÙØ£ØØ±Ù Ø§ÙØµØºÙØ±Ø©Ø Ø«Ù
à باÙÙØ±Ø¨ Ù
Ù ÙÙØ§ÙØ© اÙÙ
خرجات.
ÙØµØ¨Ø Ø§ÙØ¢Ù ÙØ§Ø¶ØÙا ÙÙ
a > Z. Ø£Ù ØªÙØ§Ø²Ù Ø§ÙØ£ØØ±Ù Ø¨ÙØ§Ø³Ø·Ø© ÙÙÙ
ÙØ§ Ø§ÙØ¹Ø¯Ø¯ÙØ©. ÙØ§ÙرÙ
ز Ø§ÙØ¹Ø¯Ø¯Ù Ø§ÙØ£Ùبر ÙØ¹ÙÙ Ø£Ù Ø§ÙØØ±Ù Ø£ÙØ¨Ø±. Ø§ÙØ±Ù
ز ÙÙØØ±Ù a ÙÙ 97â ÙÙÙ Ø£ÙØ¨Ø± Ù
Ù Ø§ÙØ±Ù
ز Ø§ÙØ¹Ø¯Ø¯Ù ÙÙØØ±Ù Z Ø§ÙØ°Ù ÙÙ 90.
- ØªØ£ØªÙ Ø§ÙØ£ØØ±Ù Ø§ÙØµØºÙرة بعد Ø§ÙØ£ØØ±Ù اÙÙØ¨Ùرة Ø¯Ø§Ø¦Ù ÙØ§ ÙØ£Ù Ø±Ù ÙØ²Ùا Ø§ÙØ¹Ø¯Ø¯ÙØ© Ø¯Ø§Ø¦Ù ÙØ§ Ø£ÙØ¨Ø±.
- تÙÙ٠بعض Ø§ÙØ£ØØ±Ù Ù
Ø«Ù
ÃØ¨Ø¹Ùدة Ø¹Ù Ø§ÙØ£ØØ±Ù اÙÙØ¬Ø§Ø¦ÙØ©. ÙÙØ§Ø ÙÙÙ Ø© Ø§ÙØØ±Ù ÙØ°Ø§ Ø£ÙØ¨Ø± Ù Ù Ø£Ù ØØ±Ù بÙÙaÙz.
Ù ÙØ§Ø²Ùات صØÙØØ©
Correct comparisons
ÙØØ³Ù Ø§ÙØØ¸Ø ØªØ¯Ø¹Ù Ø¬Ù ÙØ¹ اÙÙ ØªØµÙØØ§Øª Ø§ÙØØ¯ÙØ«Ø© اÙÙ Ø¹ÙØ§Ø± Ø§ÙØ¹Ø§ÙÙ Ù ECMA 402(IE10- Ø§ÙØ°Ù ÙØªØ·Ùب اÙÙ ÙØªØ¨Ø© Ø§ÙØ§Ø¶Ø§ÙÙØ© Intl.JS)Ø Ø¥Ø° ÙÙÙØ± ØªØ§Ø¨Ø¹ÙØ§ Ø®Ø§ØµÙØ§ ÙÙ ÙØ§Ø²ÙØ© اÙÙØµÙص Ø¨ÙØºØ§Øª Ù ØªØ¹Ø¯Ø¯Ø©Ø ÙÙÙÙØ§ ÙÙÙØ§Ø¹Ø¯Ùا.
ÙÙØ±Ø¬Ùع استدعاء Ø§ÙØªØ§Ø¨Ø¹ str.localeCompare(str2)â Ø¹Ø¯Ø¯Ùا ÙØØ¯Ø¯ Ù
ا Ø¥Ù ÙØ§Ù اÙÙØµ str Ø£ØµØºØ±Ø Ø£Ù ÙØ³Ø§ÙÙØ Ø£Ù Ø£ÙØ¨Ø± Ù
٠اÙÙØµ str2 ÙÙÙÙØ§ ÙÙÙØ§Ø¹Ø¯ اÙÙØºØ© اÙÙ
ØÙÙØ©:
- ÙÙØ±Ø¬Ùع ÙÙÙ
Ø© Ø³Ø§ÙØ¨Ø© Ø¥Ù ÙØ§Ù
strأصغر Ù Ùstr2. - ÙÙØ±Ø¬Ùع ÙÙÙ
Ø© Ù
ÙØ¬Ø¨Ø© Ø¥Ù ÙØ§Ù
strØ£ÙØ¨Ø± Ù Ùstr2. - ÙÙØ±Ø¬Ùع
0Ø¥Ù ÙØ§Ùا ٠تساÙÙÙÙ.
Ø¥ÙÙ٠اÙÙ Ø«Ø§Ù Ø§ÙØªØ§ÙÙ:
alert( 'Ãsterreich'.localeCompare('Zealand') ); // -1
mdn:js/String/localeCompare
ÙÙ Ø§ÙØÙÙÙØ©Ø ÙÙØ°Ù Ø§ÙØ¯Ø§ÙØ© Ù
ÙØ¹Ø§Ù
ÙÙÙ٠إضاÙÙÙÙ ÙÙ
ا ÙÙ ØªÙØ«ÙÙÙØ§ عÙÙ MDNØ Ø¥Ø° ÙØ³Ù
Ø ÙØ°Ø§Ù اÙÙ
ÙØ¹Ø§Ù
ÙØ§Ù Ø¨ØªØØ¯Ùد اÙÙØºØ© (تؤخذ Ù
Ù Ø¨ÙØ¦Ø© Ø§ÙØ¹Ù
٠تÙÙØ§Ø¦ÙÙØ§Ø ÙÙØ¹ØªÙ
د ØªØ±ØªÙØ¨ Ø§ÙØ£ØØ±Ù عÙ٠اÙÙØºØ©) Ø¨Ø§ÙØ¥Ø¶Ø§ÙØ© Ø¥Ù٠إعداد ÙÙØ§Ø¹Ø¯ أخر٠Ù
Ø«Ù Ø§ÙØØ³Ø§Ø³ÙØ© ØªØ¬Ø§Ù ØØ§ÙØ© Ø§ÙØ£ØØ±ÙØ Ø£Ù Ù
ا Ø¥Ù ÙØ§Ù ÙØ¬Ø¨ Ù
عاÙ
ÙØ© "a" Ù "aÌ" Ø¨Ø§ÙØ·Ø±ÙÙØ© ÙÙØ³Ùا â¦Ø§ÙØ®.
٠ا Ø®ÙÙ Ø§ÙØ³ØªØ§Ø±Ø ÙÙÙÙÙÙØ¯
ÙØªØ¹Ù Ù Ø§ÙØ¬Ø²Ø¡ Ø§ÙØªØ§ÙÙ Ù٠٠ا ÙÙØ¨Ø¹ Ø®Ù٠ستار اÙÙØµÙص Ø§ÙØªÙ ØªØ±Ø§ÙØ§Ø ÙÙØ°Ù اÙ٠عÙÙ٠ات ستÙÙÙ ÙÙÙ Ø© Ø¥Ù ÙÙØª تخطط ÙÙØªØ¹Ø§Ù ٠٠ع Ø§ÙØ±Ù ÙØ² Ø§ÙØªØ¹Ø¨ÙØ±ÙØ©Ø Ø£Ù Ø§ÙØ£ØØ±Ù Ø§ÙØ±ÙØ§Ø¶ÙØ© اÙÙØ§Ø¯Ø±Ø© أ٠اÙÙÙØ±ÙغÙÙÙÙØ© Ø£Ù Ø£Ù Ø±Ù ÙØ² ÙØ§Ø¯Ø±Ø© أخرÙ. ÙÙ ÙÙÙ ØªØ®Ø·Ù ÙØ°Ø§ Ø§ÙØ¬Ø²Ø¡ Ø¥Ù Ù٠تÙÙ Ù ÙØªÙ ÙØ§ بÙ.
Ø£Ø²ÙØ§Ø¬ بدÙÙØ© (Surrogate pairs)
ÙÙÙ Ø§ÙØ£ØØ±Ù اÙ٠ستخد٠ة Ø¨ÙØ«Ø±Ø© Ø±Ù ÙØ² Ø¹Ø¯Ø¯ÙØ© (code) ٠ؤÙÙØ© Ù Ù 2-Ø¨Ø§ÙØª. ÙØ¯Ù Ø£ØØ±Ù اÙÙØºØ§Øª Ø§ÙØ£ÙØ±ÙØ¨ÙØ©Ø ÙØ§ÙØ£Ø±ÙØ§Ù Ø ÙØØªÙ Ù Ø¹Ø¸Ù Ø§ÙØ±Ù ÙØ² اÙÙÙØ±ÙغÙÙÙÙØ© ت٠ثÙÙ Ù Ù 2-Ø¨Ø§ÙØª.
ÙÙÙØ ÙØØµÙ Ù Ù 2-Ø¨Ø§ÙØª 65536 عÙ٠ترÙÙØ¨Ùا ÙÙØ· ÙØ°ÙÙ ØºÙØ± ÙØ§ÙÙ ÙÙÙ Ø§ÙØ±Ù ÙØ² (symbol) اÙÙ ÙØØªÙÙ ÙÙÙØ©Ø ÙØ°Ø§ ÙØ¥Ù Ø§ÙØ±Ù ÙØ² (symbol) اÙÙØ§Ø¯Ø±Ø© ٠ر٠زة Ø¨Ø²ÙØ¬ ٠٠اÙÙ ØØ§Ø±Ù Ø¨ØØ¬Ù 2-Ø¨Ø§ÙØª ÙØ³Ù Ù âØ£Ø²ÙØ§Ø¬ بدÙÙØ©â (Surrogate pairs).
Ø·ÙÙ Ù٠رÙ
ز ÙÙ 2:
// ÙÙ Ø§ÙØ±ÙØ§Ø¶ÙØ§Øª X Ø§ÙØØ±Ù
alert( 'ð³'.length ); // 2
// ÙØ¬Ù ضاØÙ بدÙ
ÙØ¹
alert( 'ð'.length ); // 2
// ØØ±Ù صÙÙÙ ÙÙØ±ÙغÙÙÙÙ ÙØ§Ø¯Ø±
alert( 'ð©·¶'.length ); // 2
ÙØ§ØØ¸ Ø£Ù Ø§ÙØ£Ø²Ùاج Ø§ÙØ¨Ø¯ÙÙØ© ÙÙ
تÙÙ Ù
ÙØ¬Ùدة Ù
ÙØ° Ø¥ÙØ´Ø§Ø¡ JavaScriptØ ÙÙØ°Ø§ ÙØ§ ØªØ¹Ø§ÙØ¬ بشÙ٠صØÙØ Ø¨ÙØ§Ø³Ø·Ø© اÙÙØºØ©. Ù٠اÙÙØµÙص Ø§ÙØ³Ø§Ø¨ÙØ© ÙØ¯ÙÙØ§ رÙ
ز ÙØ§ØØ¯ ÙÙØ·Ø ÙÙÙ Ø·Ù٠اÙÙØµ length Ø¸ÙØ± عÙ٠أÙÙ 2.
Ø§ÙØªØ§Ø¨Ø¹Ø§Ù String.fromCodePoint Ù str.codePointAt ÙØ§Ø¯Ø±Ø§Ù ÙÙÙÙÙØ§ Ø§ÙØ§Ø³ØªØ®Ø¯Ø§Ù
Ø Ø¥Ø° ÙØªØ¹Ø§Ù
ÙØ§Ù Ù
ع Ø§ÙØ£Ø²Ùاج Ø§ÙØ¨Ø¯ÙÙØ© Ø¨ØµØØ©. ÙÙØ¯ Ø¸ÙØ±Øª Ù
Ø¤Ø®Ø±ÙØ§ Ù٠اÙÙØºØ©. ÙÙ Ø§ÙØ³Ø§Ø¨Ù ÙØ§Ù ÙÙØ§ÙÙ Ø§ÙØªØ§Ø¨Ø¹Ø§Ù String.fromCharCode Ù str.charCodeAt ÙÙØ·. ÙØ°Ø§Ù Ø§ÙØªØ§Ø¨Ø¹Ø§Ù ÙØ´Ø¨Ùا٠fromCodePoint Ù codePointAtØ ÙÙÙÙÙ
ا ÙØ§ ÙØªØ¹Ø§Ù
ÙØ§Ù Ù
ع Ø§ÙØ£Ø²Ùاج Ø§ÙØ¨Ø¯ÙÙØ©.
ÙØ¯ ÙÙÙÙ Ø§ÙØØµÙ٠عÙ٠ر٠ز (symbol) ÙØ§ØØ¯ ØµØ¹Ø¨ÙØ§Ø ÙØ£Ù Ø§ÙØ£Ø²Ùاج Ø§ÙØ¨Ø¯ÙÙØ© ØªÙØ¹Ø§Ù ÙÙ Ù Ø¹Ø§Ù ÙØ© ØØ±ÙÙÙ:
alert( 'ð³'[0] ); // رÙ
ÙØ² ØºØ±ÙØ¨Ø©.
alert( 'ð³'[1] ); // أجزاء Ù
Ù Ø§ÙØ²Ùج Ø§ÙØ¨Ø¯ÙÙ
ÙØ§ØØ¸ أ٠أجزاء Ø§ÙØ²Ùج Ø§ÙØ¨Ø¯ÙÙ ÙØ§ تØÙ
٠أ٠Ù
عÙ٠إذا ÙØ§Ùت Ù
ÙÙØµÙØ© Ø¹Ù Ø¨Ø¹Ø¶ÙØ§ Ø§ÙØ¨Ø¹Ø¶. ÙØ°Ø§ ÙØ¥Ù Ù
ا ÙØ¹Ø±Ø¶Ù Ù
ر alert ÙÙ Ø§ÙØ£Ø¹ÙÙ ÙÙ Ø´ÙØ¡ ØºÙØ± Ù
ÙÙØ¯.
ÙÙ
Ù٠تÙÙÙÙÙÙØ¹ Ø§ÙØ£Ø²Ùاج Ø§ÙØ¨Ø¯ÙÙØ© عÙ
ÙÙÙØ§ Ø¨ÙØ§Ø³Ø·Ø© رÙ
ÙØ²Ùا: Ø¥Ù ÙØ§Ù Ø§ÙØ±Ù
ز Ø§ÙØ¹Ø¯Ø¯Ù ÙØØ±Ù ÙÙØ¹ Ù٠اÙÙ
د٠0xd800..0xdbffØ ÙØ¥ÙÙ Ø§ÙØ¬Ø²Ø¡ Ø§ÙØ£ÙÙ Ù
Ù Ø§ÙØ²Ùج Ø§ÙØ¨Ø¯ÙÙ. Ø£Ù
ا Ø§ÙØ¬Ø²Ø¡ Ø§ÙØ«Ø§ÙÙ ÙÙØ¬Ø¨ Ø£Ù ÙÙÙÙ Ù٠اÙÙ
د٠0xdc00..0xdfff. ÙØ°Ø§ اÙÙ
د٠Ù
ØØ¬Ùز ÙÙØ£Ø²Ùاج Ø§ÙØ¨Ø¯ÙÙØ© ÙÙÙÙØ§ ÙÙÙ
عاÙÙØ± اÙÙ
تبعة.
ÙÙÙÙØ§ ÙÙØØ§ÙØ© Ø§ÙØ³Ø§Ø¨ÙØ©Ø Ø³ÙØ³ØªØ¹Ù
Ù Ø§ÙØªØ§Ø¨Ø¹ charCodeAt Ø§ÙØ°Ù
:
// ÙØ§ ÙØªØ¹Ø§Ù
Ù Ù
ع Ø§ÙØ£Ø²Ùاج Ø§ÙØ¨Ø¯ÙÙØ©Ø ÙØ°Ø§ ÙØ¥ÙÙ ÙÙØ±Ø¬Ùع أجزاء Ø§ÙØ±Ù
ز
alert( 'ð³'.charCodeAt(0).toString(16) ); // d835, between 0xd800 and 0xdbff
alert( 'ð³'.charCodeAt(1).toString(16) ); // dcb3, between 0xdc00 and 0xdfff
ستجد اÙÙ Ø²ÙØ¯ Ù Ù Ø§ÙØ·Ø±Ù ÙÙØªØ¹Ø§Ù ٠٠ع Ø§ÙØ£Ø²Ùاج Ø§ÙØ¨Ø¯ÙÙØ© ÙØ§ØÙÙØ§ Ù٠اÙÙØµÙ Iterables. ÙÙØ¬Ø¯ Ø£ÙØ¶Ùا Ù ÙØ§ØªØ¨ خاصة ÙØ°ÙÙØ ÙÙÙ ÙØ§ ÙÙØ¬Ø¯ Ø´ÙØ¡ Ø´ÙÙØ± Ù ØØ¯Ø¯ ÙÙØ§ÙتراØÙ ÙÙØ§.
Ø¹ÙØ§Ù ات Ø§ÙØªØ´ÙÙÙ ÙØªÙØÙد Ø§ÙØªØ±Ù ÙØ²
ÙÙØ¬Ø¯ ØØ±ÙÙ Ù
Ø±ÙØ¨Ø© Ù٠اÙÙØ«Ùر Ù
٠اÙÙØºØ§Øª ÙØ§Ùت٠تتÙÙÙ Ù
Ù Ø§ÙØØ±Ù Ø§ÙØ±Ø¦Ùس٠Ù
ع Ø¹ÙØ§Ù
Ø© ÙÙÙÙ/ØªØØªÙ. Ù
Ø«ÙÙØ§Ø ÙÙ
ÙÙ ÙÙØØ±Ù a Ø£Ù ÙÙÙÙ Ø£Ø³Ø§Ø³ÙØ§ ÙÙØ£ØØ±Ù Ø§ÙØªØ§ÙÙØ©: à áâäãåÄ. ÙØ¯Ù Ù
عظÙ
Ø§ÙØØ±Ù٠اÙÙ
Ø±ÙØ¨Ø© رÙ
Ø²ÙØ§ Ø§ÙØ®Ø§Øµ Ø¨ÙØ§ Ù٠جدÙÙ UTF-16. ÙÙÙ ÙÙØ³ جÙ
ÙØ¹ÙØ§Ø ÙØ°ÙÙ ÙÙØ¬Ùد اÙÙØ«Ùر Ù
Ù Ø§ÙØ§ØØªÙ
Ø§ÙØ§Øª.
To support arbitrary compositions, UTF-16 allows us to use several Unicode characters: the base character followed by one or many âmarkâ characters that âdecorateâ it.
alert( 'S\u0307' ); // SÌ
Ø¥Ù Ø§ØØªØ¬Ùا Ø¥Ù٠رÙ
ز آخر ÙÙÙ Ø£Ù ØªØØª Ø§ÙØØ±Ù ÙÙØ§ Ù
Ø´ÙÙØ©Ø أضÙÙ Ø§ÙØ¹ÙاÙ
Ø© اÙÙ
Ø·ÙÙØ¨Ø© ÙÙØ·. Ù
Ø«ÙÙØ§Ø Ø¥Ù Ø£ÙØÙÙØ§ ØØ±Ù âÙÙØ·Ø© Ø¨Ø§ÙØ£Ø³ÙÙâ (رÙ
Ø²ÙØ§ â \u0323)Ø ÙØ³ÙØØµÙ عÙÙ âS بÙÙØ§Ø· ÙÙÙÙ ÙØªØØªÙâØ SÌÌ£:
alert( 'S\u0307\u0323' ); // SÌÌ£
This provides great flexibility, but also an interesting problem: two characters may visually look the same, but be represented with different Unicode compositions.
For instance:
// S + ÙÙØ·Ø© ÙÙ Ø§ÙØ£Ø¹ÙÙ + ÙÙØ·Ø© ÙÙ Ø§ÙØ£Ø³ÙÙ
let s1 = 'S\u0307\u0323'; // SÌÌ£
// S + ÙÙØ·Ø© ÙÙ Ø§ÙØ£Ø³ÙÙ + ÙÙØ·Ø© ÙÙ Ø§ÙØ£Ø¹ÙÙ
let s2 = 'S\u0323\u0307'; // SÌ£Ì,
alert( `s1: ${s1}, s2: ${s2}` );
alert( s1 == s2 ); // خطأ Ø¨Ø§ÙØ±ØºÙ
Ù
Ù Ø£Ù Ø§ÙØØ±ÙÙÙ Ù
تساÙÙØ§Ù Ø¸Ø§ÙØ±ÙÙØ§
To solve this, there exists a âUnicode normalizationâ algorithm that brings each string to the single ânormalâ form.
ÙØ°Ù Ø§ÙØ®ÙØ§Ø±Ø²Ù ÙØ© Ù ÙØ¶ÙÙ ÙÙÙØ© ÙÙ Ø§ÙØªØ§Ø¨Ø¹ str.normalize().
alert( "S\u0307\u0323".normalize() == "S\u0323\u0307".normalize() ); // true
Ù
٠اÙÙ
ضØÙ ÙÙ ØØ§ÙØªÙØ§ Ø£Ù normalize()â ØªØ¬Ù
ع Ø³ÙØ³ÙØ© Ù
Ù 3 Ø£ØØ±Ù Ù
ع Ø¨Ø¹Ø¶ÙØ§ Ø¨Ø¹Ø¶ÙØ§ Ø¥ÙÙ ØØ±Ù ÙØ§ØØ¯: â \u1e68 (Ø§ÙØØ±Ù S Ù
ع اÙÙÙØ·ØªÙÙ).
alert( "S\u0307\u0323".normalize().length ); // 1
alert( "S\u0307\u0323".normalize() == "\u1e68" ); // true
Ù٠اÙÙØ§ÙØ¹Ø ÙØ°Ù ÙÙØ³Øª Ø§ÙØØ§ÙØ© دائÙ
ÙØ§. ÙØ°ÙÙ ÙØ£Ù Ø§ÙØ±Ù
ز Ṩ Ù
ØªØ¹Ø§Ø±Ù Ø¨ÙØ«Ø±Ø©Ø ÙØ¶ÙÙ
ÙÙÙÙÙÙ Ù
ÙÙØ´ÙØ¦ÙØ§ UTF-16 ÙÙ Ø§ÙØ¬Ø¯ÙÙ Ø§ÙØ±Ø¦ÙØ³Ù ÙØ£Ø¹Ø·Ù٠رÙ
Ø²ÙØ§ Ø®Ø§ØµÙØ§.
إ٠أردت تعÙ٠اÙÙ Ø²ÙØ¯ ع٠ÙÙØ§Ø¹Ø¯ Ø§ÙØªÙØÙد ÙØ§Ø®ØªÙØ§ÙØ§ØªÙا â ÙØ³ØªØ¬Ø¯Ùا ÙÙ Ù ÙØÙ Ù Ø¹Ø§ÙÙØ± اÙÙÙÙÙÙÙØ¯: Ù٠اذج ØªÙØÙØ¯ ØªØ±Ù ÙØ² اÙÙÙÙÙÙÙØ¯, ÙÙÙ ÙÙØ£ØºØ±Ø§Ø¶ Ø§ÙØ¹Ù ÙÙØ© اÙÙ ØªØ¹Ø§Ø±ÙØ© ÙØ§Ù٠عÙÙ٠ات Ø§ÙØ³Ø§Ø¨ÙØ© تÙÙ Ø¨Ø§ÙØºØ±Ø¶.
اÙÙ ÙÙØ®Øµ
- There are 3 types of quotes. Backticks allow a string to span multiple lines and embed expressions
${â¦}. - Strings in JavaScript are encoded using UTF-16.
- We can use special characters like
\nand insert letters by their Unicode using\u.... - To get a character, use:
[]. - To get a substring, use:
sliceorsubstring. - To lowercase/uppercase a string, use:
toLowerCase/toUpperCase. - To look for a substring, use:
indexOf, orincludes/startsWith/endsWithfor simple checks. - To compare strings according to the language, use:
localeCompare, otherwise they are compared by character codes.
ÙÙØ¬Ø¯ اÙÙØ«Ùر Ù Ù Ø§ÙØªÙابع Ø§ÙØ£Ø®Ø±Ù اÙÙ ÙÙØ¯Ø© Ù٠اÙÙØµÙص:
str.trim()âØªØØ°Ù (âØªÙØªØ·Ø¹â) اÙÙ Ø³Ø§ÙØ§Øª اÙÙØ§Ø±ØºØ© Ù Ù Ø¨Ø¯Ø§ÙØ© ÙÙÙØ§ÙØ© اÙÙØµ.str.repeat(n)âØªÙÙØ±ÙÙØ± اÙÙØµn٠رة.- ÙØ§ÙÙ Ø²ÙØ¯Ø ÙÙ ÙÙ Ø§ÙØ§Ø·Ùاع عÙÙÙØ§ ÙÙ manual.
ÙÙØ§ÙÙ ØªÙØ§Ø¨Ø¹ أخر٠ÙÙÙØµÙص Ø£ÙØ¶Ùا تع٠٠عÙÙ Ø§ÙØ¨ØØ«/Ø§ÙØ§Ø³ØªØ¨Ø¯Ø§Ù ٠ع Ø§ÙØªØ¹Ø§Ø¨Ùر اÙÙÙ Ø·ÙØ© (regular expressions). ÙÙ٠ذÙÙ Ù ÙØ¶Ùع ÙØ¨ÙØ±Ø ÙØ°Ø§ ÙÙØ¯ Ø´ÙØ±ÙØÙ ÙÙ ÙØµÙ ٠ستÙÙØ Regular expressions.
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)