ν μ€νΈ μμ
μ΄ μ₯μμλ JavaScriptμμ λ¬Έμμ΄κ³Ό ν μ€νΈλ‘ μμ νλ λ°©λ²μ μκ°ν©λλ€.
λ¬Έμμ΄
JavaScriptμ λ¬Έμμ΄ μ νμ μλ¬Έμ λ°μ΄ν°λ₯Ό λνλ΄λλ° μ¬μ©λ©λλ€. μ΄λ 16λΉνΈ λΆνΈ μλ μ μ κ°(UTF-16 code units)μ "μμ" μ§ν©μ λλ€. Stringμ κ° μμ(λ¬Έμ)λ Stringμμ νλμ μμΉλ₯Ό μ°¨μ§ν©λλ€. 첫 λ²μ§Έ μμλ μΈλ±μ€ 0 λ€μμ μΈλ±μ€ 1 λ±λ±... λ¬Έμμ΄μ κΈΈμ΄λ μμμ μμ κ°μ΅λλ€. λ¬Έμμ΄ λ¦¬ν°λ΄ λλ λ¬Έμμ΄ κ°μ²΄λ₯Ό μ¬μ©νμ¬ λ¬Έμμ΄μ λ§λ€ μ μμ΅λλ€.
μ£Όμ : μ΄νμ΄μ§λ₯Ό μμ νλ€λ©΄ MDN bug 857438μ΄ ν΄κ²°λ λ κΉμ§ U+FFFFμ΄μμ λ¬Έμλ₯Ό ν¬ν¨νμ§ λ§μΈμ. ( https://bugzilla.mozilla.org/show_bug.cgi?id=857438 ).
λ¬Έμμ΄ λ¦¬ν°λ΄
μμλ°μ΄νλ ν°λ°μ΄νλ₯Ό μ¬μ©νμ¬ κ°λ¨ν λ¬Έμμ΄μ λ§λ€ μ μμ΅λλ€:
'foo';
"bar";
λ³΄λ€ λ§μ λ¬Έμμ΄μ μ΄μ€μΌμ΄ν μνμ€λ₯Ό μ¬μ©νμ¬ λ§λ€ μ μμ΅λλ€
16μ§μ μ΄μ€μΌμ΄ν μνμ€
\x λ€μ μλ 16μ§μλ‘ ν΄μ(interpreted)λ©λλ€.
"\xA9"; // "Β©"
μ λμ½λ μ΄μ€μΌμ΄ν μνμ€
μ λμ½λ μ΄μ€μΌμ΄ν μνμ€λ \u λ€μμ μ μ΄λ λ€ κ°μ 16μ§μ μ«μ(digit)λ₯Ό νμλ‘ ν©λλ€.
"\u00A9"; // "Β©"
μ λμ½λ μ½λ ν¬μΈνΈ μ΄μ€μΌμ΄ν
ECMAScript 6μ μλ‘μ΄ κΈ°λ₯. μ λ μ½λ ν¬μΈνΈ μ΄μ€μΌμ΄νλ₯Ό μ¬μ©νλ©΄ 16 μ§μλ₯Ό μ¬μ©νμ¬ λͺ¨λ λ¬Έμλ₯Ό μ΄μ€μΌμ΄ν μ²λ¦¬ ν μ μμΌλ―λ‘ μ΅λ 0x10FFFF
μ μ λ μ½λ μ½λ ν¬μΈνΈλ₯Ό μ¬μ©ν μ μμ΅λλ€. κ°λ¨ν μ λ μ½λ μ΄μ€μΌμ΄νλ₯Ό μ¬μ©νλ©΄ λμΌν κ²°κ³Όλ₯Ό μ»κΈ° μν΄μ μλ‘ κ²μ΄νΈλ₯Ό λ³λλ‘ μμ±ν΄μΌνλ κ²½μ°κ° μμ΅λλ€.
String.fromCodePoint()
λ String.prototype.codePointAt()
λ₯Ό μ°Έκ³ νμΈμ.
"\u{2F804}";
// the same with simple Unicode escapes
"\uD87E\uDC04";
λ¬Έμμ΄ κ°μ²΄
λ¬Έμμ΄
κ°μ²΄λ λ¬Έμμ΄ κΈ°λ³Έ λ°μ΄ν° νμμ λνΌμ
λλ€.
var s = new String("foo"); // Creates a String object
console.log(s); // Displays: { '0': 'f', '1': 'o', '2': 'o'}
typeof s; // Returns 'object'
μ¬λ¬λΆμ λ¬Έμμ΄ λ¦¬ν°λ΄ κ°μ λ¬Έμμ΄ κ°μ²΄μ λ°©λ² μ€ νλλ₯Ό νΈμΆ ν μ μμ΅λλ€.βJavaScriptκ° μλμΌλ‘ λ¬Έμμ΄ λ¦¬ν°λ΄μ μμ λ¬Έμμ΄ κ°μ²΄λ‘ λ³ννκ³ , λ©μλλ₯Ό νΈμΆνκ³ , κ·Έλ¦¬κ³ λμ μμ λ¬Έμμ΄ κ°μ²΄λ₯Ό μμ ν©λλ€. λν, String.length
μμ±μ λ¬Έμμ΄ λ¦¬ν°λ΄κ³Ό ν¨κ» μ¬μ©ν μ μμ΅λλ€.
νΉλ³ν String
κ°μ²΄λ₯Ό μ¬μ©ν νμκ° μμ§ μλ ν, String
κ°μ²΄λ μ§κ΄μ λ°νλ νλμ ν μ μκΈ° λλ¬Έμ μ¬λ¬λΆμ string 리ν°λ΄μ μ¬μ©ν΄μΌν©λλ€. μλ₯Όλ€μ΄:
var s1 = "2 + 2"; // Creates a string literal value
var s2 = new String("2 + 2"); // Creates a String object
eval(s1); // Returns the number 4
eval(s2); // Returns the string "2 + 2"
λ¬Έμμ΄ κ°μ²΄λ λ¬Έμμ΄μ λ¬Έμ μλ₯Ό λνλ΄λ νλμ μμ±, κΈΈμ΄λ₯Ό κ°μ΅λλ€. μλ₯Ό λ€μ΄, "Hello, World!"κ° 13μ μ΄λ―λ‘ λ€μ μ½λλ xλ₯Ό κ° 13μΌλ‘ ν λΉν©λλ€. String
κ°μ²΄λ λ¬Έμμ΄μμλ UTF-16 μ½λ λ¨μμ μλ₯Ό λνλ΄λ κΈΈμ΄κ° νλμ μμ±μ κ°μ§λλ€. μλ₯Ό λ€μ΄, λ€μ μ½λμμλ "Hello, World!"κ° UTF-16 μ½λ λ¨μλ‘ ννλλ 13κ°μ λ¬Έμλ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ x κ°μ΄ 13μ΄ λ©λλ€. λ°°μ΄ λΈλν· μ€νμΌμ μ¬μ©νμ¬ κ° μ½λ λ¨μμ μ‘μΈμ€ ν μ μμ΅λλ€. λ¬Έμμ΄μ λ³κ²½ λΆκ°λ₯ν λ°°μ΄κ³Ό κ°μ κ°μ²΄μ΄κΈ° λλ¬Έμ κ°λ³ λ¬Έμλ₯Ό λ³κ²½ν μ μμ΅λλ€.
var mystring = "Hello, World!";
var x = mystring.length;
mystring[0] = "L"; // This has no effect, because strings are immutable
mystring[0]; // This returns "H"
μ λ μ½λ μ€μΉΌλΌ κ°μ΄ U + FFFF (ν¬κ· ν μ€κ΅μ΄ / μΌλ³Έμ΄ / νκ΅μ΄ / λ² νΈλ¨μ΄ λ¬Έμ λ° μΌλΆ μ΄λͺ¨ν°μ½)λ³΄λ€ ν° λ¬Έμλ κ°κ° μλ‘ λ€λ₯Έ λ κ°μ μ½λ λ¨μλ‘ UTF-16μ μ μ₯λ©λλ€. μλ₯Ό λ€μ΄, λ¨μΌ λ¬Έμ U + 1F600 "Emoji grinning face"λ₯Ό ν¬ν¨νλ λ¬Έμμ΄μ κΈΈμ΄κ° 2μ
λλ€. λκ΄νΈλ₯Ό μ¬μ©νμ¬ μ΄λ¬ν λ¬Έμμ΄μ κ°λ³ μ½λ λ¨μμ μ‘μΈμ€νλ©΄ μΌμΉνμ§ μλ λ리 μ½λ λ¨μκ°μλ λ¬Έμμ΄μ΄ λ§λ€μ΄μ§λ λ±μ λ°λμ§νμ§ μμ κ²°κ³Όκ° λ°μν μ μμ΅λλ€. μ λ μ½λ νμ€ μλ° MDN λ²κ·Έ 857438μ΄ μμ λ νμ μμ κ° μ΄ νμ΄μ§μ μΆκ°λμ΄μΌν©λλ€. String.fromCodePoint ()
λλ String.prototype.codePointAt ()
λ μ°Έμ‘°νμμμ€.
String
κ°μ²΄λ λ€μν λ©μλκ° μμ΅λλ€: λ¬Έμμ΄ μ체μ λ³κ²½λ κ²°κ³Όλ₯Ό λ°ννλ substring
κ³Ό toUpperCase
κ° κ·Έκ²!
λ€μ νλ λ¬Έμμ΄
κ°μ²΄μ λ©μλλ₯Ό μμ½ν κ²μ
λλ€.
Method | Description |
---|---|
charAt ,
charCodeAt ,
codePointAt
|
λ¬Έμμ΄μμ μ§μ λ μμΉμ μλ λ¬Έμλ λ¬Έμ μ½λλ₯Ό λ°νν©λλ€. |
indexOf ,
lastIndexOf
|
λ¬Έμμ΄μμ μ§μ λ λΆλΆ λ¬Έμμ΄μ μμΉλ μ§μ λ λΆλΆ λ¬Έμμ΄μ λ§μ§λ§ μμΉλ₯Ό κ°κ° λ°νν©λλ€. |
startsWith ,
endsWith ,
includes
|
λ¬Έμμ΄ μμνκ³ , λλκ³ , μ§μ λ λ¬Έμμ΄μ ν¬ν¨νλμ§μ μ¬λΆλ₯Ό λ°νν©λλ€. |
concat |
λ λ¬Έμμ΄μ ν μ€νΈλ₯Ό κ²°ν©νκ³ μλ‘μ΄ λ¬Έμμ΄μ λ°νν©λλ€. |
fromCharCode ,
fromCodePoint
|
μ λμ½λ κ°μ μ§μ λ μνμ€λ‘λΆν° λ¬Έμμ΄μ ꡬμΆν©λλ€. λ¬Έμμ΄ μΈμ€ν΄μ€κ° μλ λ¬Έμμ΄ ν΄λμ€μ λ©μλμ λλ€. |
split |
λΆλΆ λ¬Έμμ΄λ‘ λ¬Έμμ΄μ λΆλ¦¬νμ¬ λ¬Έμμ΄ λ°°μ΄λ‘ λ¬Έμμ΄ κ°μ²΄λ₯Ό λΆν ν©λλ€. |
slice |
λ¬Έμμ΄μ ν λΆλΆμ μΆμΆνκ³ μ λ¬Έμμ΄μ λ°νν©λλ€. |
substring ,
substr
|
μ΄λ μμ λ° μ’ λ£ μΈλ±μ€ λλ μμ μΈλ±μ€ λ° κΈΈμ΄λ₯Ό μ§μ νμ¬, λ¬Έμμ΄μ μ§μ λ μΌλΆλ₯Ό λ°νν©λλ€. |
match ,
replace ,
search
|
μ κ· ννμμΌλ‘ μμ ν©λλ€. |
toLowerCase ,toUpperCase
|
.λͺ¨λ μλ¬Έμ λλ λλ¬Έμμμ κ°κ° λ¬Έμμ΄μ λ°νν©λλ€. |
normalize |
νΈμΆ λ¬Έμμ΄ κ°μ μ λ μ½λ νμ€ν μμμ λ°νν©λλ€. |
repeat |
μ£Όμ΄μ§ νλ₯Ό λ°λ³΅νλ κ°μ²΄ μμλ‘ μ΄λ£¨μ΄μ§ λ¬Έμμ΄μ λ°νν©λλ€. |
trim |
λ¬Έμμ΄μ μμκ³Ό λμμ 곡백μ μλ¦ λλ€. |
λ€μ€ μ ν νλ¦Ώ λ¬Έμμ΄
ν νλ¦Ώ λ¬Έμμ΄μ ν¬ν¨ μμ μ©λ©νλ λ¬Έμμ΄ λ¦¬ν°λ΄μ λλ€. μ¬λ¬λΆμ κ·Έκ²λ€κ³Ό ν¨κ» λ€μ€ μ λ¬Έμμ΄ λ° λ¬Έμμ΄ λ³΄κ° κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.
ν
νλ¦Ώ λ¬Έμμ΄μ μμλ°μ΄νλ ν°λ°μ΄ν λμ μ back-tick (` `) (grave accent)λ¬Έμλ‘ λ¬Άμ΅λλ€. ν
νλ¦Ώ λ¬Έμμ΄μ μ리 νμμλ₯Ό ν¬ν¨ ν μ μμ΅λλ€. μ΄λ€μ λ¬λ¬ κΈ°νΈμ μ€κ΄νΈλ‘ νμλ©λλ€. (${expression}
)
λ€μ€ μ
μμ€μ μ½μ νλ μλ‘μ΄ μ λ¬Έμλ ν νλ¦Ώ λ¬Έμμ΄μ μΌλΆμ λλ€. μ μμ μΈ λ¬Έμμ΄μ μ¬μ©νλ©΄, μ¬λ¬λΆμ λ€μ€ μ λ¬Έμμ΄μ μ»κΈ° μν΄ λ€μκ³Ό κ°μ ꡬ문μ μ¬μ©ν΄μΌν©λλ€:
console.log(
"string text line 1\n\
string text line 2",
);
// "string text line 1
// string text line 2"
λ€μ€ μ λ¬Έμμ΄κ³Ό κ°μ ν¨κ³Όλ₯Ό μ»κΈ° μν΄, μ¬λ¬λΆμ μ΄μ μΈ μ μμ΅λλ€:
console.log(`string text line 1
string text line 2`);
// "string text line 1
// string text line 2"
ν¬ν¨μ
μΌλ° λ¬Έμμ΄ λ΄μμ ννμμ ν¬ν¨νκΈ° μν΄, λ€μκ³Ό κ°μ ꡬ문μ μ¬μ©ν©λλ€:
var a = 5;
var b = 10;
console.log("Fifteen is " + (a + b) + " and\nnot " + (2 * a + b) + ".");
// "Fifteen is 15 and
// not 20."
μ΄μ , ν νλ¦Ώ λ¬Έμμ΄μ κ°μ§κ³ , μ¬λ¬λΆμ μ½κΈ°μ κ°μ΄ λ체λ₯Ό λ§λλ syntactic sugarμ μ¬μ©μ ν μ μμ΅λλ€:
var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and\nnot ${2 * a + b}.`);
// "Fifteen is 15 and
// not 20."
μμΈν λ΄μ©μ JavaScript μ°Έμ‘°μμ ν νλ¦Ώ λ¬Έμμ΄μ λν΄ μ½μ΄λ³΄μΈμ.
κ΅μ ν
Intl
κ°μ²΄λ ECMAμ€ν¬λ¦½νΈ κ΅μ APIμ μΈμ΄μ λ¬Έμμ΄κ³Ό μ«μμμκ³Ό λ μ§μ μκ°μμμ μ 곡νλ λͺ
μΉκ³΅κ°μ
λλ€. Collator
, NumberFormat
, μ DateTimeFormat
κ°μ²΄λ€μ μν μμ±μλ€μ Intl
κ°μ²΄μ νΉμ±λ€μ
λλ€.
λ μ§μ μκ°μμ
DateTimeFormat
κ°μ²΄λ λ μ§μ μκ°μ μμνκΈ°μ μ μ©ν©λλ€. λ€μ μ½λλ λ―Έκ΅μμ μ°μ΄λ μμ΄λ‘ λ μ§λ₯Ό μμν©λλ€. (κ²°κ³Όλ λ€λ₯Έ μκ°λμ λ€λ¦
λλ€)
var msPerDay = 24 * 60 * 60 * 1000;
// July 17, 2014 00:00:00 UTC.
var july172014 = new Date(msPerDay * (44 * 365 + 11 + 197));
var options = {
year: "2-digit",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
timeZoneName: "short",
};
var americanDateTime = new Intl.DateTimeFormat("en-US", options).format;
console.log(americanDateTime(july172014)); // 07/16/14, 5:00 PM PDT
μ«μ μμ
NumberFormat
κ°μ²΄λ ν΅νλ₯Ό μν΄ μ«μλ₯Ό μμνλκ²μ λν΄ μ μ©νλ€.
var gasPrice = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
minimumFractionDigits: 3,
});
console.log(gasPrice.format(5.259)); // $5.259
var hanDecimalRMBInChina = new Intl.NumberFormat("zh-CN-u-nu-hanidec", {
style: "currency",
currency: "CNY",
});
console.log(hanDecimalRMBInChina.format(1314.25)); // οΏ₯ δΈ,δΈδΈε.δΊδΊ
μ‘°ν©
Collator
κ°μ²΄λ λ¬Έμμ΄μ λΉκ΅νκ³ κ΅¬λΆνλ κ²μ λν΄ μ μ©ν©λλ€.
μλ₯Ό λ€μ΄, μ€μ λ‘ λ μΌμμ phonebookκ³Ό dictionaryλΌλ 2κ°μ λ€λ₯Έ μ’ λ₯μ λͺ λ Ήμ΄λ€μ΄ μμ΅λλ€. μ νκΈ°λ‘λΆλ₯λ μ리λ₯Ό κ°μ‘°ν©λλ€. κ·Έλ¦¬κ³ κ΅¬λΆμ μμ λ€λ₯Έκ²λ€μ "Γ€", "ΓΆ"μΈκ²μ²λΌ "ae", "oe"λ‘ νμ₯λμ΅λλ€.
var names = ["Hochberg", "HΓΆnigswald", "Holzman"];
var germanPhonebook = new Intl.Collator("de-DE-u-co-phonebk");
// as if sorting ["Hochberg", "Hoenigswald", "Holzman"]:
console.log(names.sort(germanPhonebook.compare).join(", "));
// logs "Hochberg, HΓΆnigswald, Holzman"
μ΄λ€ λ μΌλ§λ€μ μ¬λΆμ λ³λͺ¨μκ³Ό ν¨κ» νμ©νλ€. κ·Έλμ μ¬μ μμμ μ΄κ²μ λ³λͺ¨μμ 무μνλΌκ³ λͺ λ ΉνκΈ°μ μ€μ©μ μ΄λ€.
var germanDictionary = new Intl.Collator("de-DE-u-co-dict");
// as if sorting ["Hochberg", "Honigswald", "Holzman"]:
console.log(names.sort(germanDictionary.compare).join(", "));
// logs "Hochberg, Holzman, HΓΆnigswald"
Intl
APIμ λν μμΈν λ΄μ©μ Introducing the JavaScript Internationalization APIλ₯Ό μ°Έμ‘°νμΈμ.