ìë°ì¤í¬ë¦½í¸ì ê¸ì íëë§ ì ì¥í ì ìë ë³ëì ìë£íì´ ììµëë¤. í ì¤í¸ íìì ë°ì´í°ë 길ì´ì ìê´ìì´ ë¬¸ìì´ ííë¡ ì ì¥ë©ëë¤.
ìë°ì¤í¬ë¦½í¸ìì 문ìì´ì íì´ì§ ì¸ì½ë© ë°©ìê³¼ ìê´ìì´ íì UTF-16 íìì ë°ë¦ ëë¤.
ë°ì´í
ë°ì´íì ì¢ ë¥ê° 무ìì´ ììëì§ ì기í´ë´ ìë¤.
문ìì´ì ììë°ì´íë í°ë°ì´í, ë°±í±ì¼ë¡ ê°ì ì ììµëë¤.
let single = 'ììë°ì´í';
let double = "í°ë°ì´í";
let backticks = `ë°±í±`;
ììë°ì´íì í°ë°ì´íë 기ë¥ì ì°¨ì´ê° ììµëë¤. ê·¸ë°ë° ë°±í±ì í¹ë³í 기ë¥ì´ ììµëë¤. ííìì ${â¦}ë¡ ê°ì¸ê³ ì´ë¥¼ ë°±í±ì¼ë¡ ê°ì¼ 문ìì´ ì¤ê°ì ë£ì´ì£¼ë©´ í´ë¹ ííìì 문ìì´ ì¤ê°ì ì½ê² ì½ì
í ì ìì£ . ì´ë° ë°©ìì í
í릿 리í°ë´(template literal)ì´ë¼ê³ ë¶ë¦
ëë¤.
function sum(a, b) {
return a + b;
}
alert(`1 + 2 = ${sum(1, 2)}.`); // 1 + 2 = 3.
ë°±í±ì ì¬ì©íë©´ 문ìì´ì ì¬ë¬ ì¤ì ê±¸ì³ ìì±í ìë ììµëë¤.
let guestList = `ìë:
* John
* Pete
* Mary
`;
alert(guestList); // ìë 리ì¤í¸ë¥¼ ì¬ë¬ ì¤ì ê±¸ì³ ìì±í¨
ìì°ì¤ë½ê² ì¬ë¬ ì¤ì 문ìì´ì´ ë§ë¤ì´ì¡ë¤ì. ììë°ì´íë í°ë°ì´í를 ì¬ì©íë©´ ìì ê°ì ë°©ìì¼ë¡ ì¬ë¬ ì¤ì§ë¦¬ 문ìì´ì ë§ë¤ ì ììµëë¤.
ìë ìì를 ì¤íí´ë´ ìë¤. ìë¬ê° ë°ìí©ëë¤.
let guestList = "ìë: // Error: Invalid or unexpected token
* John";
ììë°ì´íë í°ë°ì´íë¡ ë¬¸ìì´ì íííë ë°©ìì ìë°ì¤í¬ë¦½í¸ê° ë§ë¤ì´ì¡ì ëë¶í° ìììµëë¤. ì´ëë 문ìì´ì ì¬ë¬ ì¤ì ê±¸ì³ ìì±í ìê°ì¡°ì°¨ 못 íë ì기ìì£ . ë°±í±ì ê·¸ ì´íì ë±ì¥í 문ë²ì´ê¸° ë문ì ë°ì´íë³´ë¤ ë¤ìí 기ë¥ì ì ê³µí©ëë¤.
ë°±í±ì 'í
í릿 í¨ì(template function)'ììë ì¬ì©ë©ëë¤. func`string` ê°ì´ 첫 ë²ì§¸ ë°±í± ë°ë¡ ìì í¨ì ì´ë¦(func)ì ì¨ì£¼ë©´, ì´ í¨ìë ë°±í± ìì 문ìì´ ì¡°ê°ì´ë ííì íê° ê²°ê³¼ë¥¼ ì¸ìë¡ ë°ì ìëì¼ë¡ í¸ì¶ë©ëë¤. ì´ë° 기ë¥ì 'íê·¸ë í
í릿(tagged template)'ì´ë¼ ë¶ë¥´ëë°, íê·¸ë í
í릿ì ì¬ì©íë©´ ì¬ì©ì ì§ì í
í릿ì ë§ë 문ìì´ì ì½ê² ë§ë¤ ì ììµëë¤. íê·¸ë í
í릿과 í
í릿 í¨ìì ëí ìì¸í ë´ì©ì MDN 문ììì íì¸í´ë³´ì¸ì. ì°¸ê³ ë¡ ì´ ê¸°ë¥ì ì주 ì¬ì©ëì§ ììµëë¤.
í¹ì 기í¸
'ì¤ ë°ê¿ 문ì(newline character)'ë¼ ë¶ë¦¬ë í¹ìê¸°í¸ \nì ì¬ì©íë©´ ììë°ì´íë í°ë°ì´íë¡ë ì¬ë¬ ì¤ ë¬¸ìì´ì ë§ë¤ ì ììµëë¤.
let guestList = "ìë:\n * John\n * Pete\n * Mary";
alert(guestList); // ìë 리ì¤í¸ë¥¼ ì¬ë¬ ì¤ì ê±¸ì³ ìì±í¨
ë°ì´í를 ì´ì©í´ ë§ë ì¬ë¬ ì¤ ë¬¸ìì´ê³¼ ë°±í±ì ì´ì©í´ ë§ë ì¬ë¬ ì¤ ë¬¸ìì´ì íí ë°©ìë§ ë¤ë¥¼ ë¿ ì°¨ì´ê° ììµëë¤.
let str1 = "Hello\nWorld"; // 'ì¤ ë°ê¿ 기í¸'를 ì¬ì©í´ ë ì¤ì§ë¦¬ 문ìì´ì ë§ë¦
// ë°±í±ê³¼ ì¼ë°ì ì¸ ì¤ ë°ê¿ ë°©ë²(ìí°)ì ì¬ì©í´ ë ì¤ì§ë¦¬ 문ìì´ì ë§ë¦
let str2 = `Hello
World`;
alert(str1 == str2); // true
ìë°ì¤í¬ë¦½í¸ì ì¤ ë°ê¿ 문ì를 ë¹ë¡¯í ë¤ìí âí¹ìâ 문ìë¤ì´ ììµëë¤.
í¹ì 문ì 목ë¡:
| í¹ì 문ì | ì¤ëª |
|---|---|
\n |
ì¤ ë°ê¿ |
\r |
ìºë¦¬ì§ 리í´(carriage return). Windowsìì ìºë¦¬ì§ 리í´ê³¼ ì¤ ë°ê¿ í¹ì 문ì를 ì¡°í©(\r\n)í´ ì¤ì ë°ê¿ëë¤. ìºë¦¬ì§ 리í´ì ë¨ë
ì¼ë¡ ì¬ì©íë ê²½ì°ë ììµëë¤. |
\', \" |
ë°ì´í |
\\ |
ìì¬ëì |
\t |
í |
\b, \f, \v |
ê°ê° ë°±ì¤íì´ì¤(Backspace), í¼ í¼ë(Form Feed), ì¸ë¡ í(Vertical Tab)ì ëíë ëë¤. í¸íì± ì ì§ë¥¼ ìí´ ë¨ììë 기í¸ë¡ ìì¦ì ì¬ì©íì§ ììµëë¤. |
\xXX |
16ì§ì ì ëì½ë XXë¡ ííí ì ëì½ë ê¸ìì
ëë¤(ìì: ìíë²³ 'z'ë '\x7A'ì ëì¼í¨). |
\uXXXX |
UTF-16 ì¸ì½ë© ê·ì¹ì ì¬ì©íë 16ì§ì ì½ë XXXXë¡ ííí ì ëì½ë 기í¸ì
ëë¤. XXXXë ë°ëì ë¤ ê°ì 16ì§ìë¡ êµ¬ì±ëì´ì¼ í©ëë¤(ìì: \u00A9ë ì ìê¶ ê¸°í¸ Â©ì ì ëì½ëì). |
\u{Xâ¦XXXXXX}(í ê°ìì ì¬ì¯ ê° ì¬ì´ì 16ì§ì ê¸ì) |
UTF-32ë¡ ííí ì ëì½ë 기í¸ì ëë¤. ëªëª í¹ìí ê¸ìë ë ê°ì ì ëì½ë 기í¸ë¥¼ ì¬ì©í´ ì¸ì½ë©ëë¯ë¡ 4ë°ì´í¸ë¥¼ ì°¨ì§í©ëë¤. ì´ ë°©ë²ì ì¬ì©íë©´ 긴 ì½ë를 ì½ì í ì ììµëë¤. |
ì ëì½ë를 ì¬ì©í ìì:
alert( "\u00A9" ); // ©
alert( "\u{20331}" ); // 佫, ì¤êµì´(긴 ì ëì½ë)
alert( "\u{1F60D}" ); // ð, ìë ì¼êµ´ 기í¸(긴 ì ëì½ë)
모ë í¹ì 문ìë 'ì´ì¤ì¼ì´í 문ì(escape character)'ë¼ê³ ë ë¶ë¦¬ë ìì¬ëì (backslash character) \ë¡ ììí©ëë¤.
ìì¬ëìë 문ìì´ ë´ì ë°ì´í를 ë£ì ëë ì¬ì©í ì ììµëë¤.
ìì:
alert( 'I\'m the Walrus!' ); // I'm the Walrus!
ì ìììì ì´í´ë³¸ ë°ì ê°ì´ 문ìì´ ë´ì ë°ì´íì \를 ê¼ ë¶ì¬ì¤ì¼ í©ëë¤. ì´ë ê² íì§ ìì¼ë©´ ìë°ì¤í¬ë¦½í¸ë í´ë¹ ë°ì´íê° ë¬¸ìì´ì ë«ë ì©ëë¡ ì¬ì©ë ê²ì´ë¼ í´ìí기 ë문ì
ëë¤.
ì´ì¤ì¼ì´í 문ìë 문ìì´ì ê°ì ë ì¬ì©í ë°ì´íì ëì¼í ë°ì´íìë§ ë¶ì¬ì£¼ë©´ ë©ëë¤. 문ìì´ ë´ìì ì¢ ë ì°ìíê² ë°ì´í를 ì¬ì©íë ¤ë©´ ìëì ê°ì´ ë°ì´í ëì ë°±í±ì¼ë¡ 문ìì´ì ê°ì¸ì£¼ë©´ ë©ëë¤.
alert( `I'm the Walrus!` ); // I'm the Walrus!
ìì¬ëì \ë 문ìì´ì ì ííê² ì½ê¸° ìí ì©ëë¡ ë§ë¤ì´ì¡ì¼ë¯ë¡ \ë ì ìí ì´ ëëë©´ ì¬ë¼ì§ëë¤. ë©ëª¨ë¦¬ì ì ì¥ëë 문ìì´ì \ê° ììµëë¤. ìì ììë¤ì ì¤ííì ë ë¨ë alert ì°½ì íµí´ ì´ë¥¼ íì¸í ì ììµëë¤.
ê·¸ë ë¤ë©´ 문ìì´ ìì ìì¬ëì \를 ë³´ì¬ì¤ì¼ íë ê²½ì°ì ì´ë»ê² í´ì¼ í ê¹ì?
\\ê°ì´ ìì¬ëì를 ë ê° ë¶ì´ë©´ ë©ëë¤.
alert( `ìì¬ëì: \\` ); // ìì¬ëì: \
문ìì´ì 길ì´
length íë¡í¼í°ì 문ìì´ì 길ì´ê° ì ì¥ë©ëë¤.
alert( `My\n`.length ); // 3
\nì âí¹ì 문ìâ íëë¡ ì·¨ê¸ë기 ë문ì My\nì 길ì´ë 3ì
ëë¤.
lengthë íë¡í¼í°ì
ëë¤.ìë°ì¤í¬ë¦½í¸ ì´ì¸ì ì¸ì´ë¥¼ ì¬ì©íë ê°ë°ìë¤ì str.lengthê° ìë str.length()ë¡ ë¬¸ìì´ì 길ì´ë¥¼ ììë´ë ¤ê³ íë ê²½ì°ê° ììµëë¤. íì§ë§ ìíë ëë¡ ëìíì§ ììµëë¤.
lengthë í¨ìê° ìëê³ , ì«ìê° ì ì¥ëë íë¡í¼í°ë¼ë ì ì 주ìíì기 ë°ëëë¤. ë¤ì ê´í¸ë¥¼ ë¶ì¼ íìê° ììµëë¤.
í¹ì ê¸ìì ì ê·¼í기
문ìì´ ë´ í¹ì ìì¹ì¸ posì ìë ê¸ìì ì ê·¼íë ¤ë©´ [pos]ê°ì´ ëê´í¸ë¥¼ ì´ì©íê±°ë str.charAt(pos)ë¼ë ë©ìë를 í¸ì¶íë©´ ë©ëë¤. ìì¹ë 0ë¶í° ììí©ëë¤.
let str = `Hello`;
// 첫 ë²ì§¸ ê¸ì
alert( str[0] ); // H
alert( str.charAt(0) ); // H
// ë§ì§ë§ ê¸ì
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ë ìì°¨ì ì¼ë¡ H, e, l, l, oê° ë©ëë¤.)
}
문ìì´ì ë¶ë³ì±
문ìì´ì ìì í ì ììµëë¤. ë°ë¼ì 문ìì´ì ì¤ê° ê¸ì íë를 ë°ê¾¸ë ¤ê³ íë©´ ìë¬ê° ë°ìí©ëë¤.
ì§ì ì¤ìµí´ë´ ìë¤.
let str = 'Hi';
str[0] = 'h'; // Error: Cannot assign to read only property '0' of string 'Hi'
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'
ë¶ë¶ 문ìì´ ì°¾ê¸°
문ìì´ìì ë¶ë¶ 문ìì´(substring)ì ì°¾ë ë°©ë²ì ì¬ë¬ ê°ì§ê° ììµëë¤.
str.indexOf
첫 ë²ì§¸ ë°©ë²ì str.indexOf(substr, pos) ë©ìë를 ì´ì©íë ê²ì ëë¤.
ì´ ë©ìëë 문ìì´ strì posììë¶í° ììí´, ë¶ë¶ 문ìì´ substrì´ ì´ëì ìì¹íëì§ë¥¼ ì°¾ìì¤ëë¤. ìíë ë¶ë¶ 문ìì´ì ì°¾ì¼ë©´ ìì¹ë¥¼ ë°ííê³ ê·¸ë ì§ ìì¼ë©´ -1ì ë°íí©ëë¤.
ìì:
let str = 'Widget with id';
alert( str.indexOf('Widget') ); // 0, strì 'Widget'ì¼ë¡ ììí¨
alert( str.indexOf('widget') ); // -1, indexOfë ë·ì문ì를 ë°ì§ë¯ë¡ ìíë 문ìì´ì ì°¾ì§ ëª»í¨
alert( str.indexOf("id") ); // 1, "id"ë 첫 ë²ì§¸ ìì¹ìì ë°ê²¬ë¨ (Widgetìì id)
str.indexOf(substr, pos)ì ë ë²ì§¸ 매ê°ë³ì posë ì íì ì¼ë¡ ì¬ì©í ì ìëë°, ì´ë¥¼ ëª
ìíë©´ ê²ìì´ í´ë¹ ìì¹ë¶í° ììë©ëë¤.
ë¶ë¶ 문ìì´ "id"ë ìì¹ 1ìì ì²ì ë±ì¥íëë°, ë ë²ì§¸ ì¸ìì 2를 ë겨 "id"ê° ë ë²ì§¸ë¡ ë±ì¥íë ìì¹ê° ì´ëì¸ì§ ììë´
ìë¤.
let str = 'Widget with id';
alert( str.indexOf('id', 2) ) // 12
문ìì´ ë´ ë¶ë¶ 문ìì´ ì 체를 ëìì¼ë¡ 무ì¸ê°ë¥¼ íê³ ì¶ë¤ë©´ ë°ë³µë¬¸ ìì indexOf를 ì¬ì©íë©´ ë©ëë¤. ë°ë³µë¬¸ì´ íëì© ë ëë§ë¤ ê²ì ìì ìì¹ê° ê°±ì ëë©´ì indexOfê° ìë¡ê² í¸ì¶ë©ëë¤.
let str = 'As sly as a fox, as strong as an ox';
let target = 'as'; // as를 ì°¾ìë´
ìë¤.
let pos = 0;
while (true) {
let foundPos = str.indexOf(target, pos);
if (foundPos == -1) break;
alert( `ìì¹: ${foundPos}` );
pos = foundPos + 1; // ë¤ì ìì¹ë¥¼ 기ì¤ì¼ë¡ ê²ìì ì´ì´ê°ëë¤.
}
ëì¼í ìê³ ë¦¬ì¦ì ì¬ì©í´ ì½ëë§ ì§§ê² ì¤ì´ë©´ ë¤ìê³¼ ê°ìµëë¤.
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문ì ì¡°ê±´ìì indexOf를 ì¸ ë 주ìí ì ì´ íë ììµëë¤. ìëì ê°ì´ ì½ë를 ìì±íë©´ ìíë 결과를 ì»ì ì ììµëë¤.
let str = "Widget with id";
if (str.indexOf("Widget")) {
alert("ì°¾ìë¤!"); // ìëí ëë¡ ëìíì§ ììµëë¤.
}
str.indexOf("Widget")ì 0ì ë°ííëë°, if문ìì 0ì falseë¡ ê°ì£¼íë¯ë¡ alert ì°½ì´ ë¨ì§ ììµëë¤.
ë°ë¼ì ë¶ë¶ 문ìì´ ì¬ë¶ë¥¼ ê²ì¬íë ¤ë©´ ìëì ê°ì´ -1ê³¼ ë¹êµí´ì¼ í©ëë¤.
let str = "Widget with id";
if (str.indexOf("Widget") != -1) {
alert("ì°¾ìë¤!"); // ìëí ëë¡ ëìí©ëë¤.
}
ë¹í¸ NOT ì°ì°ì를 ì¬ì©í 기ë²
ì¤ëì ë¶í° ì í´ ì¤ë ë¹í¸(bitwise) NOT ì°ì°ì ~를 ì¬ì©í ê¸°ë² íë를 ìê°í´ëë¦¬ê² ìµëë¤. ë¹í¸ NOT ì°ì°ìë í¼ì°ì°ì를 32ë¹í¸ ì ìë¡ ë°ê¾¼ í(ììë¶ë 모ë ë²ë ¤ì§) 모ë ë¹í¸ë¥¼ ë°ì í©ëë¤.
ë°ë¼ì nì´ 32ë¹í¸ ì ìì¼ ë ~nì -(n+1)ì´ ë©ëë¤.
ìì:
alert( ~2 ); // -3, -(2+1)ê³¼ ê°ì
alert( ~1 ); // -2, -(1+1)ê³¼ ê°ì
alert( ~0 ); // -1, -(0+1)ê³¼ ê°ì
alert( ~-1 ); // 0, -(-1+1)ê³¼ ê°ì
ì ìììì 본 ë°ì ê°ì´ ë¶í¸ê° ìë 32ë¹í¸ ì ì n ì¤, ~nì 0ì¼ë¡ ë§ëë ê²½ì°ë n == -1ì¼ ëê° ì ì¼í©ëë¤.
ì´ë¥¼ ìì©í´ì indexOfê° -1ì ë°ííì§ ìë ê²½ì°ë¥¼ if ( ~str.indexOf("...") )ë¡ ê²ì¬í´ ë´
ìë¤.
ì´ë ê² ~str.indexOf("...")를 ì¬ì©íë©´ ì½ëì 길ì´ë¥¼ ì¤ì¼ ì ììµëë¤.
let str = "Widget";
if (~str.indexOf("Widget")) {
alert( 'ì°¾ìë¤!' ); // ìëí ëë¡ ëìí©ëë¤.
}
ì¬ì¤ ì´ë ê² ì¸ì´ í¹ì ì 기ë¥ì ì¬ì©í´ ì§ê´ì ì´ì§ ìì ì½ë를 ìì±íë ê²ì ì¶ì²í´ ëë¦¬ì§ ììµëë¤. ê·¸ë ì§ë§ ìì ê°ì 기ë²ì ì¤ëë ì¤í¬ë¦½í¸ìì ì½ê² ë§ë ì ì기 ë문ì ììëì´ì¼ í©ëë¤.
if (~str.indexOf(...)) í¨í´ì ì½ë를 ë§ëë©´ 'ë¶ë¶ 문ìì´ì¸ì§ íì¸âíë ì½ëë¼ê³ 기ìµí´ë¡ìë¤.
ì°¸ê³ ë¡ -1 ì´ì¸ìë ~ ì°ì°ì ì ì© ì 0ì ë°ííë ì«ìë ë¤ìí©ëë¤. ì주 í° ì«ìì ~ ì°ì°ì를 ì ì©íë©´ 32ë¹í¸ ì ìë¡ ë°ê¾¸ë ê³¼ì ìì ì림 íìì´ ë°ìí기 ë문ì´ì£ . ì´ë° ì«ì ì¤ ê°ì¥ í° ì«ìë 4294967295ì
ëë¤(~4294967295ë 0ì). 문ìì´ì´ ì주 ê¸¸ì§ ìì ê²½ì°ìë§ ~ ì°ì°ìê° ìëí ëë¡ ìëíë¤ë ì ì ìê³ ê³ì길 ë°ëëë¤.
모ë ìë°ì¤í¬ë¦½í¸ìì .includes ë©ìë(ìëìì ë°°ì)를 ì¬ì©í´ ë¶ë¶ 문ìì´ í¬í¨ ì¬ë¶ë¥¼ ê²ì¬í©ëë¤. ì´ë° 기ë²ì ì¤ëë ìë°ì¤í¬ë¦½í¸ììë§ ë³¼ ì ììµëë¤.
includes, startsWith, endsWith
ë¹êµì ê·¼ëì ëì¨ ë©ìëì¸ str.includes(substr, pos)ë strì ë¶ë¶ 문ìì´ substrì´ ìëì§ì ë°ë¼ trueë false를 ë°íí©ëë¤.
ë¶ë¶ 문ìì´ì ìì¹ ì ë³´ë íìíì§ ìê³ í¬í¨ ì¬ë¶ë§ ìê³ ì¶ì ë ì í©í ë©ìëì ëë¤.
alert( "Widget with id".includes("Widget") ); // true
alert( "Hello".includes("Bye") ); // false
str.includesìë str.indexOfì²ë¼ ë ë²ì§¸ ì¸ì를 ë기면 í´ë¹ ìì¹ë¶í° ë¶ë¶ 문ìì´ì ê²ìí©ëë¤.
alert( "Widget".includes("id") ); // true
alert( "Widget".includes("id", 3) ); // false, ì¸ ë²ì§¸ ìì¹ ì´íì "id"ê° ììµëë¤.
ë©ìë str.startsWithì str.endsWithë ë©ìë ì´ë¦ ê·¸ëë¡ ë¬¸ìì´ strì´ í¹ì 문ìì´ë¡ ììíëì§(start with) ì¬ë¶ì í¹ì 문ìì´ë¡ ëëëì§(end with) ì¬ë¶ë¥¼ íì¸í ë ì¬ì©í ì ììµëë¤.
alert( "Widget".startsWith("Wid") ); // true, "Widget"ì "Wid"ë¡ ììí©ëë¤.
alert( "Widget".endsWith("get") ); // true, "Widget"ì "get"ì¼ë¡ ëë©ëë¤.
ë¶ë¶ 문ìì´ ì¶ì¶í기
ìë°ì¤í¬ë¦½í¸ì ë¶ë¶ 문ìì´ ì¶ì¶ê³¼ ê´ë ¨ë ë©ìëê° ì¸ ê°ì§ ììµëë¤. ì¸ ê°ì§ ë©ìë substring, substr, slice를 íëì© ììë´
ìë¤.
str.slice(start [, end])-
문ìì´ì
startë¶í°endê¹ì§(endë 미í¬í¨)를 ë°íí©ëë¤.ìì:
let str = "stringify"; alert( str.slice(0, 5) ); // 'strin', 0ë²ì§¸ë¶í° 5ë²ì§¸ ìì¹ê¹ì§(5ë²ì§¸ ìì¹ì ê¸ìë í¬í¨íì§ ìì) alert( str.slice(0, 1) ); // 's', 0ë²ì§¸ë¶í° 1ë²ì§¸ ìì¹ê¹ì§(1ë²ì§¸ ìì¹ì ìë í¬í¨íì§ ìì)ë ë²ì§¸ ì¸ìê° ìëµë ê²½ì°ì, ëª ìí ìì¹ë¶í° 문ìì´ ëê¹ì§ë¥¼ ë°íí©ëë¤.
let str = "stringify"; alert( str.slice(2) ); // ringify, 2ë²ì§¸ë¶í° ëê¹ì§startìendë ììê° ë ìë ììµëë¤. ìì를 ë기면 문ìì´ ëììë¶í° ì¹´ì´í ì ììí©ëë¤.let str = "stringify"; // ëìì 4ë²ì§¸ë¶í° ììí´ ëìì 1ë²ì§¸ ìì¹ê¹ì§ alert( str.slice(-4, -1) ); // gif str.substring(start [, end])-
startìendì¬ì´ì ìë 문ìì´ì ë°íí©ëë¤.substringìsliceì ì주 ì ì¬íì§ë§startê°endë³´ë¤ ì»¤ë ê´ì°®ë¤ë ë° ì°¨ì´ê° ììµëë¤.ìì:
let str = "stringify"; // ëì¼í ë¶ë¶ 문ìì´ì ë°íí©ëë¤. alert( str.substring(2, 6) ); // "ring" alert( str.substring(6, 2) ); // "ring" // slice를 ì¬ì©íë©´ ê²°ê³¼ê° ë¤ë¦ ëë¤. alert( str.slice(2, 6) ); // "ring" (ê°ì) alert( str.slice(6, 2) ); // "" (ë¹ ë¬¸ìì´)substringì ìì ì¸ì를 íì©íì§ ììµëë¤. ììë0ì¼ë¡ ì²ë¦¬ë©ëë¤. str.substr(start [, length])-
startììë¶í° ììí´lengthê°ì ê¸ì를 ë°íí©ëë¤.substrì ë ìì¹ ëì ì 길ì´ë¥¼ 기ì¤ì¼ë¡ 문ìì´ì ì¶ì¶íë¤ë ì ììsubstringê³¼sliceì ì°¨ì´ê° ììµëë¤.let str = "stringify"; alert( str.substr(2, 4) ); // ring, ë ë²ì§¸ë¶í° ê¸ì ë¤ ê°ì²« ë²ì§¸ ì¸ìê° ììë©´ ë¤ììë¶í° ê°ì를 ì ëë¤.
let str = "stringify"; alert( str.substr(-4, 2) ); // gi, ëìì ë¤ ë²ì§¸ ìì¹ë¶í° ê¸ì ë ê°
ë¶ë¶ 문ìì´ ì¶ì¶ê³¼ ê´ë ¨ë ë©ìë를 ìì½í´ ë´ ìë¤.
| ë©ìë | ì¶ì¶í ë¶ë¶ 문ìì´ | ìì íì© ì¬ë¶(ì¸ì) |
|---|---|---|
slice(start, end) |
startë¶í° endê¹ì§(endë 미í¬í¨) |
ìì íì© |
substring(start, end) |
startì end ì¬ì´ |
ììë 0ì¼ë¡ ì·¨ê¸í¨ |
substr(start, length) |
startë¶í° lengthê°ì ê¸ì |
ìì íì© |
모ë ì¬ì©í´ë ê´ì°®ìµëë¤. ê·¸ë°ë° substrìë ë¨ì ì´ íë ììµëë¤. substrë ì½ì´ ìë°ì¤í¬ë¦½í¸ ëª
ì¸ì(ECMA-262 â ì®ê¸´ì´)ê° ìë, 구ì ì¤í¬ë¦½í¸ì ëìí기 ìí´ ë¨ê²¨ ë ë¸ë¼ì°ì ì ì© ê¸°ë¥ë¤ì ëª
ìí´ ëì ë¶ë¡ B(Annex B)ì ì ìëì´ììµëë¤. ê±°ì 모ë ê³³ìì ì´ ë©ìëê° ëìí긴 íì§ë§ ë¸ë¼ì°ì ì´ì¸ì í¸ì¤í¸ íê²½ììë ì ëë¡ ëìíì§ ìì ì ììµëë¤.
ë¨ì ë ë©ìë ì¤ sliceë ìì ì¸ì를 íì©íë¤ë 측면ìì substringë³´ë¤ ì¢ ë ì ì°í©ëë¤. ë©ìë ì´ë¦ë ë ì§§ì£ . ë°ë¼ì ì¸ ë©ìë ì¤ sliceë§ ì¸ìëê³ ì¬ì©í´ë ì¶©ë¶í ê² ê°ìµëë¤.
문ìì´ ë¹êµí기
ë¹êµ ì°ì°ì ì±í°ìì ììë³´ìë¯ì´ 문ìì´ì ë¹êµí ë ìíë²³ ìì를 기ì¤ì¼ë¡ ê¸ìë¼ë¦¬ ë¹êµê° ì´ë¤ì§ëë¤.
ê·¸ë°ë° ìëì ê°ì´ ëª ê°ì§ ì´ìí´ ë³´ì´ë ê²ë¤ì´ ììµëë¤.
-
ì문ìë ë문ìë³´ë¤ íì í½ëë¤.
alert( 'a' > 'Z' ); // true -
ë°ì êµ¬ë³ ê¸°í¸(diacritical mark)ê° ë¶ì 문ìë ìíë²³ ìì 기ì¤ì ë°ë¥´ì§ ììµëë¤.
alert( 'Ãsterreich' > 'Zealand' ); // true (Ãsterreichë ì¤ì¤í¸ë¦¬ì를 ë ì¼ì´ë¡ í기í ê²ì - ì®ê¸´ì´)ì´ë° ìì¸ì¬í ë문ì ì´ë¦ìì¼ë¡ êµê°ë¥¼ ëì´í ë ììì¹ ëª»í ê²°ê³¼ê° ëì¬ ì ììµëë¤. ì¬ëë¤ì
Ãsterreichê°Zealandë³´ë¤ ìì ëì¬ ê²ì´ë¼ ììíëë° ê·¸ë ì§ ìì£ .
ìë°ì¤í¬ë¦½í¸ ë´ë¶ìì 문ìì´ì´ ì´ë»ê² íìëëì§ ì기íë©° ìì¸ì ììë´ ìë¤.
모ë 문ìì´ì UTF-16ì ì¬ì©í´ ì¸ì½ë©ëëë°, UTF-16ìì 모ë ê¸ìê° ì«ì íìì ì½ëì 매ì¹ë©ëë¤. ì½ëë¡ ê¸ì를 ì»ê±°ë ê¸ììì ì°ê´ ì½ë를 ììë¼ ì ìë ë©ìëë ë¤ìê³¼ ê°ìµëë¤.
str.codePointAt(pos)-
posì ìì¹í ê¸ìì ì½ë를 ë°íí©ëë¤.// ê¸ìë ê°ì§ë§ ì¼ì´ì¤ë ë¤ë¥´ë¯ë¡ ë°íëë ì½ëê° ë¤ë¦ ëë¤. alert( "z".codePointAt(0) ); // 122 alert( "Z".codePointAt(0) ); // 90 String.fromCodePoint(code)-
ì«ì íìì
codeì ëìíë ê¸ì를 ë§ë¤ì´ì¤ëë¤.alert( String.fromCodePoint(90) ); // Z\uë¤ì í¹ì ê¸ìì ëìíë 16ì§ì ì½ë를 ë¶ì´ë ë°©ìì¼ë¡ë ìíë ê¸ì를 ë§ë¤ ì ììµëë¤.// 90ì 16ì§ìë¡ ë³ííë©´ 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) ë³´ë¤ í¬ë¤ë ê²°ë¡ ì´ ëì¶ë©ëë¤.
- ìíë²³ ì문ìì ì½ëë ë문ìì ì½ëë³´ë¤ í¬ë¯ë¡ ì문ìë ë문ì ë¤ì ìµëë¤.
Ãê°ì ê¸ìë ì¼ë° ìí벳과 ë©ë¦¬ ë¨ì´ì ¸ ììµëë¤.Ãì ì½ëë ìíë²³ ì문ìì ì½ëë³´ë¤ í¨ì¬ í½ëë¤.
문ìì´ ì ëë¡ ë¹êµí기
ì¸ì´ë§ë¤ 문ì ì²´ê³ê° ë¤ë¥´ê¸° ë문ì 문ìì´ì âì ëë¡â ë¹êµíë ìê³ ë¦¬ì¦ì ë§ëë ê±´ ìê°ë³´ë¤ ê°ë¨íì§ ììµëë¤.
문ìì´ì ë¹êµíë ¤ë©´ ì¼ë¨ íì´ì§ìì ì´ë¤ ì¸ì´ë¥¼ ì¬ì©íê³ ìëì§ ë¸ë¼ì°ì ê° ììì¼ í©ëë¤.
ë¤ííë 모ë ë¸ë¼ì°ì ëë¶ë¶ì´ êµì í ê´ë ¨ íì¤ì¸ ECMA-402를 ì§ìí©ëë¤(IE10ì ìì½ê²ë Intl.js ë¼ì´ë¸ë¬ë¦¬ë¥¼ ì¬ì©í´ì¼ í©ëë¤).
ECMA-402ì ì¸ì´ê° ë¤ë¥¼ ë ì ì©í ì ìë 문ìì´ ë¹êµ ê·ì¹ê³¼ ì´ë¥¼ ì¤ìíë ë©ìëê° ì ìëì´ììµëë¤.
str.localeCompare(str2)를 í¸ì¶íë©´ ECMA-402ìì ì ìí ê·ì¹ì ë°ë¼ strì´ str2ë³´ë¤ ììì§, ê°ìì§, í°ì§ë¥¼ ëíë´ì£¼ë ì ìê° ë°íë©ëë¤.
strì´str2ë³´ë¤ ìì¼ë©´ ìì를 ë°íí©ëë¤.strì´str2ë³´ë¤ í¬ë©´ ìì를 ë°íí©ëë¤.strê³¼str2ì´ ê°ì¼ë©´0ì ë°íí©ëë¤.
ìì:
alert( 'Ãsterreich'.localeCompare('Zealand') ); // -1
localeCompareì ì í ì¸ì ë ê°ë¥¼ ë ì ë¬í ì ììµëë¤. 기ì¤ì´ ëë ì¸ì´ë¥¼ ì§ì (ì무ê²ë ì§ì íì§ ììì¼ë©´ í¸ì¤í¸ íê²½ì ì¸ì´ê° ê¸°ì¤ ì¸ì´ê° ë¨)í´ì£¼ë ì¸ìì ë·ì문ì를 구ë¶í ì§ë "a"ì "aÌ"를 ë¤ë¥´ê² ì·¨ê¸í ì§ì ëí ê²ì ì¤ì í´ì£¼ë ì¸ìê° ë ìì£ . ìì¸í ì¬íì ê´ë ¨ íì´ì§ìì íì¸í´ ë³´ì기 ë°ëëë¤.
문ìì´ ì¬í
ì´ë² ì ìì 문ìì´ì ë ê¹ê² ë¤ë£¹ëë¤. ì´ëª¨í°ì½ì´ë ì¼ë¶ ìí 기í¸, ìí 문ì를 ë¹ë¡¯í í¬ê· ê¸°í¸ ë±ì ë¤ë¤ì¼ íë¤ë©´ ìì¼ë¡ ë°°ì¸ ë´ì©ì´ ì ì©íê² ì¬ì©ë ê²ì ëë¤.
ì´ë° ê¸ìë¤ì ì¬ì©í ê³íì´ ìë¤ë©´ 본 ì ì ëì´ê°ì ë ì¢ìµëë¤.
ìë¡ê²ì´í¸ ì
ì주 ì¬ì©ëë ê¸ìë¤ì 모ë 2ë°ì´í¸ ì½ë를 ê°ì§ê³ ììµëë¤. ì ë½ê¶ ì¸ì´ìì ì¬ì©ëë ê¸ì, ì«ì, ìí 문ì ëë¤ìë 2ë°ì´í¸ íí ì²´ê³ë¥¼ ì¬ì©í©ëë¤.
ê·¸ë°ë° 2ë°ì´í¸ë 65,536(2ì 16ì¹ â ì®ê¸´ì´)ê°ì ì¡°í©ë°ì ë§ë¤ì´ë´ì§ 못í기 ë문ì íì¡´íë 기í¸ë¥¼ 모ë ííí기ì ì¶©ë¶íì§ ììµëë¤. ì´ë¥¼ 극복í기 ìí´ ì¬ì© ë¹ëê° ë®ì 기í¸ë 'ìë¡ê²ì´í¸ ì(surrogate pair)'ì´ë¼ ë¶ë¦¬ë 2ë°ì´í¸ ê¸ìë¤ì ìì ì¬ì©í´ ì¸ì½ë©í©ëë¤.
ìë¡ê²ì´í¸ ìì ì¬ì©í´ ì¸ì½ë©í 기í¸ì 길ì´ë 2ì
ëë¤.
alert( 'ð³'.length ); // 2, ìíìì ì°ì´ë ë문ì X(ê·¸ë¦¬ì¤ ë¬¸ì ì¹´ì´ - ì®ê¸´ì´)
alert( 'ð'.length ); // 2, ìì¼ë©´ì ë물 í리ë ì¼êµ´ì ëíë´ë ì´ëª¨í°ì½
alert( 'ð©·¶'.length ); // 2, ì¬ì© ë¹ëê° ë®ì ì¤êµì´(ìí문ì)
ìë°ì¤í¬ë¦½í¸ê° ë§ë¤ì´ì¡ì ë¹ìì ìë¡ê²ì´í¸ ìì ì¡´ì¬íì§ ìììµëë¤. ë°ë¼ì ìë°ì¤í¬ë¦½í¸ë ìë¡ê²ì´í¸ ìì¼ë¡ ííí 기í¸ë¥¼ ì ëë¡ ì²ë¦¬íì§ ëª»í©ëë¤.
ì ìììì 기í¸ë íëì§ë§ 길ì´ë 2ì¸ ê²ì ë³´ê³ ììí´íì¤ ì ìëë°, ì´ë° ì´ì ë문ì´ì£ .
String.fromCodePointì str.codePointAtì ëª
ì¸ìì ì¶ê°ë ì§ ì¼ë§ ì ë ë©ìëë¡, ìë¡ê²ì´í¸ ìì ì ëë¡ ì²ë¦¬í ì ìë ëª ì ëë ë©ìë ì
ëë¤. ë ë©ìëê° ë±ì¥í기 ì ìë String.fromCharCodeì str.charCodeAtì ì¬ì©íìëë°, ì´ ë©ìëë¤ì fromCodePoint, codePointAtê³¼ ëì¼íê² ëìíì§ë§ ìë¡ê²ì´í¸ ìì ì²ë¦¬íì§ ëª»í©ëë¤.
ìë¡ê²ì´í¸ ìì ë ê¸ìë¡ ì·¨ê¸ë기 ë문ì 기í¸ë¥¼ ê°ì ¸ì¤ë ê² ê½¤ ê¹ë¤ë¡ìµëë¤.
alert( 'ð³'[0] ); // ì´ìí 기í¸ê° ì¶ë ¥ë¨
alert( 'ð³'[1] ); // ìë¡ê²ì´í¸ ìì ì¼ë¶ê° ì¶ë ¥ë¨
ìë¡ê²ì´í¸ ìì 구ì±íë ê¸ìë¤ì ë¶ì´ìì ëë§ ìë¯¸ê° ìë¤ë ì ì ì ìí´ì¼ í©ëë¤. ë°ë¼ì ì ìì를 ì¤ííë©´ ì¼ë¿ì°½ì ì미 ìë ì°ë 기 기í¸ê° ì¶ë ¥ë©ëë¤.
기ì ì ì¼ë¡ ìë¡ê²ì´í¸ ìì ìë¡ê²ì´í¸ ìì ëìíë ì½ë를 ì¬ì©í´ ê°ì§í ì ììµëë¤. ê¸ìì ì½ëê° 0xd800..0xdbff ì¬ì´ì ìì¼ë©´ ì´ ì½ëë ìë¡ê²ì´í¸ ìì 구ì±íë 첫 ë²ì§¸ ê¸ì를 ëíë¸ë¤ë ê²ì ì ì ìì£ . ì´ ê²½ì° ìë¡ê²ì´í¸ ìì 구ì±íë ë ë²ì§¸ ê¸ìì ì½ëë ë°ëì 0xdc00..0xdfff ì¬ì´ì ìì´ì¼ í©ëë¤. ë²ì 0xd800..0xdbffì 0xdc00..0xdfffë íì¤ìì ìë¡ê²ì´í¸ ìì ìí´ ì¼ë¶ë¬ ë¹ìë ì½ëì
ëë¤.
ìì를 ì´í´ë´ ìë¤.
// charCodeAtë ìë¡ê²ì´í¸ ìì ì²ë¦¬íì§ ëª»í기 ë문ì ìë¡ê²ì´í¸ ìì 구ì±íë ë¶ë¶ì ëí ì½ë를 ë°íí©ëë¤.
alert( 'ð³'.charCodeAt(0).toString(16) ); // d835, 0xd800ê³¼ 0xdbff ì¬ì´ì ì½ë
alert( 'ð³'.charCodeAt(1).toString(16) ); // dcb3, 0xdc00ê³¼ 0xdfff ì¬ì´ì ì½ë
ìë¡ê²ì´í¸ ìì ë¤ë£¨ë ë¤ìí ë°©ë²ì ëí´ì iterable ê°ì²´ ì±í°ìì ì´í´ë³´ê² ìµëë¤. ìë¡ê²ì´í¸ ì ê´ë ¨ ë¼ì´ë¸ë¬ë¦¬ë ì긴 íë° ìê°í´ ë릴 ë§í ë¼ì´ë¸ë¬ë¦¬ë ìì§ê¹ì§ ìë ìí©ì ëë¤.
ë°ì êµ¬ë³ ê¸°í¸ì ì ëì½ë ì ê·í
ì¬ë¬ ì¸ì´ìì ë² ì´ì¤ê° ëë ê¸ì ìë ìëì ë°ì êµ¬ë³ ê¸°í¸ë¼ ë¶ë¦¬ë 기í¸ë¥¼ ë¶ì¬ ê¸ì를 ë§ëëë¤.
a를 ë² ì´ì¤ ê¸ìë¡, à áâäãåÄ를 ë§ëë ê² ê°ì´ ë§ì´ì£ . ì´ë° âí©ì±â ê¸ì ëë¶ë¶ì UTF-16 í
ì´ë¸ìì ë
ìì ì¸ ì½ë를 ê°ìµëë¤. ê·¸ë°ë° 모ë í©ì± ê¸ìì ì½ëê° ë¶ì¬ëì§ë ììµëë¤. ì¡°í© ê°ë¥í ê¸ìì ìê° ë무 ë§ê¸° ë문ì
ëë¤.
ììì ì¡°í©ì ì§ìí기 ìí´ UTF-16ìì ëª ê°ì ì ëì½ë 문ì를 ë¨ê²¨ëììµëë¤. ë² ì´ì¤ ê¸ì ë¤ì íë í¹ì ì¬ë¬ ê°ì ì ëì½ë 문ì를 ë¶ì¬ ë² ì´ì¤ ê¸ì를 ê¾¸ë° ì ìëë¡ ë§ì´ì£ .
ì´ë¥¼ ì´ì©íë©´ ë² ì´ì¤ ê¸ì S ë¤ì 'ì ì âì ëíë´ë ì ëì½ë 문ì(\u0307)를 ë¶ì¬ SÌ를 ë§ë¤ ì ììµëë¤.
alert( 'S\u0307' ); // SÌ
ë°ì êµ¬ë³ ê¸°í¸ë¥¼ íë ë¶ì¸ ìíìì ì¶ê° ë°ì êµ¬ë³ ê¸°í¸ê° íìí ê²½ì°ìë 문ì ê° ììµëë¤. íìí 기í¸ì ì ëì½ë 문ì를 ë¶ì¬ì£¼ê¸°ë§ íë©´ ë©ëë¤.
SÌì 'ìë ì âì ëíë´ë ì ëì½ë 문ì(\u0323)를 ì¶ê°í´ì âS ìì ìëì ì ì´ ë¶ê²â í´ë´
ìë¤.
ìì:
alert( 'S\u0307\u0323' ); // SÌÌ£
ì´ë° ë°©ìì ìì²ë ì ì°ì±ì ì ê³µíëë°, ë¨ì ë ììµëë¤. ëì¼ë¡ ë´¤ì ëë ê°ì ê¸ìì¸ë° ì ëì½ë ì¡°í©ì´ ë¤ë¥¸ ê²½ì°ê° ìê¹ëë¤.
ìì:
let s1 = 'S\u0307\u0323'; // SÌÌ£, S + ì ì + ìë« ì
let s2 = 'S\u0323\u0307'; // SÌ£Ì, S + ìë« ì + ì ì
alert( `s1: ${s1}, s2: ${s2}` );
alert( s1 == s2 ); // ëì¼ë¡ 보기ì ê°ì ê¸ìì´ì§ë§ ëë± ë¹êµ ì falseê° ë°íë©ëë¤.
ì´ë° 문ì 를 í´ê²°íë ¤ë©´ 'ì ëì½ë ì ê·í(unicode normalization)'ë¼ ë¶ë¦¬ë ìê³ ë¦¬ì¦ì ì¬ì©í´ ê° ë¬¸ìì´ì ëì¼í ííë¡ 'ì ê·íâí´ì¼ í©ëë¤.
ì ëì½ë ì ê·í ìê³ ë¦¬ì¦ì str.normalize()ì 구íëì´ ììµëë¤.
alert( "S\u0307\u0323".normalize() == "S\u0323\u0307".normalize() ); // true
S ì, ìëì ì ì ë¶ì´ë ì¬ë¡ìì normalize()를 ì¬ì©íë©´ ì¸ ê°ì ê¸ìê° íëë¡ í©ì³ì§ëë¤. Ṩ를 ëíë´ë ì ëì½ë \u1e68ë¡ ë§ì´ì£ .
alert( "S\u0307\u0323".normalize().length ); // 1
alert( "S\u0307\u0323".normalize() == "\u1e68" ); // true
ê·¸ë°ë° íì¤ì íì ì´ë ì§ ììµëë¤. á¹¨ê° íëì ì ëì½ëë¡ í©ì³ì§ë ê²ì UTF-16ì ë§ëë ë° ì°¸ì¬í ì¬ëë¤ì´ Ṩë 'ì¶©ë¶í ëíë ì ìë ì¬ë¡âë¼ ìê°íê³ , Ṩ를 UTF-16 í
ì´ë¸ì í¬í¨íê³ ì½ë를 ë¶ì¬í´ëì기 ë문ì
ëë¤.
ì¤ë¬´ìì ì´ ì ìì ë¤ë£¬ ë´ì©ë§ì¼ë¡ë ì¶©ë¶íì§ë§, ì ê·í ê·ì¹ê³¼ ë³íì ëí´ ë ìê³ ì¶ë¤ë©´ ì ëì½ë íì¤ ë¶ë¡ì Unicode Normalization Formsì í´ë¹ ë´ì©ì´ ìì¼ë ì°¸ê³ íì기 ë°ëëë¤.
ìì½
- ìë°ì¤í¬ë¦½í¸ì ì¸ ì¢
ë¥ì ë°ì´íê° ìëë°, ì´ ì¤ íëì¸ ë°±í±ì 문ìì´ì ì¬ë¬ ì¤ì ê±¸ì³ ì¸ ì ìê² í´ì£¼ê³ 문ìì´ ì¤ê°ì
${â¦}ì ì¬ì©í´ ííìë ë£ì ì ìë¤ë ì ì´ í¹ì§ì ëë¤. - ìë°ì¤í¬ë¦½í¸ìì UTF-16ì ì¬ì©í´ 문ìì´ì ì¸ì½ë©í©ëë¤.
\nê°ì í¹ì 문ì를 ì¬ì©í ì ììµëë¤.\u...를 ì¬ì©íë©´ í´ë¹ 문ìì ì ëì½ë를 ì¬ì©í´ ê¸ì를 ë§ë¤ ì ììµëë¤.- 문ìì´ ë´ì ê¸ì íë를 ì»ì¼ë ¤ë©´ ëê´í¸
[]를 ì¬ì©íì¸ì. - ë¶ë¶ 문ìì´ì ì»ì¼ë ¤ë©´
sliceësubstringì ì¬ì©íì¸ì. - ì문ìë¡ ë°ê¾¸ë ¤ë©´
toLowerCase, ë문ìë¡ ë°ê¾¸ë ¤ë©´toUpperCase를 ì¬ì©íì¸ì. indexOf를 ì¬ì©íë©´ ë¶ë¶ 문ìì´ì ìì¹ë¥¼ ì»ì ì ììµëë¤. ë¶ë¶ 문ìì´ ì¬ë¶ë§ ìê³ ì¶ë¤ë©´includes/startsWith/endsWith를 ì¬ì©íë©´ ë©ëë¤.- í¹ì ì¸ì´ì ì í©í ë¹êµ ê¸°ì¤ ì¬ì©í´ 문ìì´ì ë¹êµíë ¤ë©´
localeCompare를 ì¬ì©íì¸ì. ì´ ë©ìë를 ì¬ì©íì§ ìì¼ë©´ ê¸ì ì½ë를 기ì¤ì¼ë¡ 문ìì´ì´ ë¹êµë©ëë¤.
ì´ì¸ìë 문ìì´ì ì¸ ì ìë ì ì©í ë©ìë ëª ê°ì§ê° ììµëë¤.
str.trim()â 문ìì´ ìê³¼ ëì 공백 문ì를 ë¤ë¬ì´ ì¤ëë¤(ì ê±°í¨).str.repeat(n)â 문ìì´ìnë² ë°ë³µí©ëë¤.- ì´ ì¸ì ë©ìëë MDN 문ììì íì¸í´ë³´ì기 ë°ëëë¤.
ì ê· ííìì ì¬ì©í´ 문ìì´ì 찾거ë êµì²´í´ì£¼ë ë©ìëë ì¬ë¬ ê° ìëë° ì´ë ì주 í° ì£¼ì ì´ê¸° ë문ì ë³ëì ì¹ì ì ê· ííììì ë¤ë£¨ê² ìµëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.