String
https://devdocs.io/javascript/global_objects/string
String μ μκ°μ²΄λ λ¬Έμμ΄μ μμ±μμ΄λ€.
Syntax
λ¬Έμμ΄ λ¦¬ν°λ΄μ π
'sting text'
"string text"
"μμ΄ νκ΅μ΄ κΈ°ν λ±λ± λ€μν μΈμ΄λ₯Ό μμ©"
''
, ""
λ₯Ό μ¬μ©
global objectλ₯Ό λ°λ‘ λ§λ€μ΄μ μ¬μ©ν μ μλ€.
String(thing)
Parameters
thing string μ무κ°μ΄λ.
Template literals
ECMAScript 2015λΆν°λ string literalμ΄ Template Iiteralsκ° string literalμ΄ λ μ μλ€.
`hello ${world}`
Escape notation
νΉμλ¬Έμ νν μ΄λ°κ±Έ Escape notation μ΄λΌκ³ νλꡬλ π€
javascriptλ μμ λ°μ΄νμ ν° λ°μ΄νλ₯Ό ꡬλΆνμ§ μκΈ° λλ¬Έμ μκ΄μμ΄ λμνλ€.
μ½λ
μΆλ ₯
\XXX
8μ§μ Latin-1 λ¬Έμ
(where XXX
is 1β3 octal digits; range of 0
β377
)
\'
"\'" => "''" μμ λ°μ΄ν
\"
"\"" => """ ν° λ°μ΄ν
\\
"\\" => "\" μμ¬λμ
\n
"\n abc" => " abc" κ°ν
\r
carriage return μ΄κ²μ΄ 무μμΈκ°.. μμ νμκΈ°λ₯Ό μλ‘ λ€μ΄μΌ ν μ λ line feedμ carriage returnμ΄ ν¨κ»ν΄μΌ λ€μμ€ μμλΆλΆμμ κΈμ μΈ μ μμλ€. https://stackoverflow.com/questions/12747722/what-is-the-difference-between-a-line-feed-and-a-carriage-return μ°Έκ³
\v
vertical tab π€
\b
backspace
\f
form feed If you were programming for a 1980s-style printer, it would eject the paper and start a new page. You are virtually certain to never need it. https://stackoverflow.com/questions/4334370/escape-sequence-f-form-feed-what-exactly-is-it
\uXXXX
unicode codepoint "\u0056" => "V"
\xXX
Latin-1 λ¬Έμ
(where XX
is 2 hex digits; range of 0x00
β0xFF
)
Long literal strings
νμ€μ μ¬λ¬μ€λ΄μ μ λ ₯νκ³ μΆμ λμ
+μ°μ°μ
νΉμ "\"
μμ¬λμλ₯Ό μ΄μ©νμ¬ κΈ΄ λ¬Έμμ΄μ κ°ννμ¬λ νμ€λ‘ 보μ¬μ€ μ μλ€.
let longString1 = "μ¬λ¬ μ€ μμ± νλ€.. " +
"μ¬λ¬ μ€.."
let longString2 = "μ¬λ¬μ€ μμ± νλ€.. \
μμ¬λμλ μμ¬λμ λ€μμ 곡백μ ν¬ν¨ν \
μ΄λ€ λ¬Έμκ° μμλ μλλ€."
μμ¬λμλ₯Ό μ¬μ©ν κ²½μ° μμ¬λμ λ€μμ μ΄λ€ λ¬Έμλ μμλ μλλ€.
Description
λ¬Έμμ΄μ ν
μ€νΈ ννλ‘ ννλ μ μλ λ°μ΄ν°λ₯Ό 보κ΄νλ λ° μ μ©νλ€. κ°μ₯ λ§μ΄ μ¬μ©λλ κ²μ length
μ°κ²°νλ +
μ +=
μ°μ°μ μλΈ λ¬Έμλ₯Ό νμΈνλ substring
, μμΌλ©΄ μμΉλ₯Ό νμΈνλ indexOf()
, μλΈ λ¬Έμλ₯Ό μΆμΆνλ substring()
Character access(λ¬Έμμ κ·Ό)
charAt() λ©μλ μ΄μ©νκΈ°
return 'cat'.charAt(1); // returns "a"
ECMAScript 5μμ μκ°νκ³ μλ λ¬Έμμ΄μ λ°°μ΄κ³Ό κ°μ objectλ‘ μ·¨κΈνμ¬ λ°°μ΄μ²λΌ μΈλ±μ€λ‘ μ κ·ΌνκΈ°
return 'cat'[1]; // returns "a"
νμ§λ§ λ°°μ΄μ²λΌ μλ‘μ΄ κ°μ ν λΉνκ±°λ μμ ν μ μλ€.
λ°°μ΄κ³Ό λ€λ₯΄λ€
const str = "foo";
const arr = ["f","o","o"];
str.length; // 3
arr.length; // 3
str.indexOf("o"); // 1
arr.indexOf("o"); // 1
const strConcat = str.concat("bar"); // "foobar"
const arrConcat = arr.concat(["b", "a", "r"]); // ["f","o","o,"b","a","r"]
str === strConcat // false
arr === arrConcat // false
str // "foo"
arr // ["f","o","o"]
μ΄λ°μ μ λ³΄κ³ λ λ€ "λ¬Έμμ λ°°μ΄"μ΄λΌκ³ μκ°ν μ μμ§λ§ μλλ€.
str[1] = "0";
arr[1] = "0";
str; // "foo"
arr; // ["f", "0", "o"]
λ¬Έμμ΄μ "λΆλ³ κ° Immutable"μ΄μ§λ§ λ°°μ΄μ "κ°λ³κ° Mutable"μ΄λ€.
str[1]λ²μ²λΌ νΉμ λ¬Έμλ₯Ό μ κ·Όνλ ννκ° λͺ¨λ μλ°μ€ν¬λ¦½νΈ μμ§μμ μ ν¨ν κ²μ μλλ€.
μ€μ μΈν°λ· μ΅μ€νλ‘λ¬ 7μ μ΄λ₯Ό λ¬Έλ² μλ¬λ‘ μΈμνλ€.
str.charAt(1)λ‘ μ κ·Όνλκ² λ§λ€.
λ¬Έμμ΄μ λΆλ³ κ°μΌλ‘ λ¬Έμμ΄ λ©μλλ κ·Έ λ΄μ©μ λ°λ‘ λ³κ²½νμ§ μκ³ νμ μλ‘μ΄ λ¬Έμμ΄μ μμ±ν ν λ°ννλ€. νμ§λ§ λ°°μ΄λ©μλλ κ·Έ μ리μμ μμ νλ€.
λ¬Έμμ΄μ λ€λ₯Ό λ μ μ©ν λ°°μ΄ λ©μλλ λ¬Έμμ΄μ μΈ μ μμ§λ§, λ¬Έμμ΄μ λν΄ λΆλ³ λ°°μ΄ λ©μλλ₯Ό λΉλ € μΈ μ μλ€.
str.join; // undefined
str.map; // undefined
// The join() method creates and returns a new string by concatenating all of the elements in an array
const strJoin = Array.prototype.join.call(str, "-");
// mapμ μλ‘μ΄ λ°°μ΄μ returnνκΈ° λλ¬Έμ join()νμ§ μμΌλ©΄ λ°°μ΄λ‘ return
const strMap = Array.prototype.map.call(str, function(v){
return v.toUpperCase() + ".";
}).join("");
strJoin // "f-o-o"
strMap // "F.O.O."
λ°°μ΄μ κ°λ³ λ©μλλ μ¬μ©ν μ μλ€.
// The reverse() method reverses an array in place.
Array.prototype.reverse.call(str);
// String κ°μ²΄ λνΌλ₯Ό λ°ννλ€.
str // "foo" :(
λ¬Έμμ΄μ λΆλ³ κ°μ΄λΌ λ°λ‘λ°λ‘ λ³κ²½λμ§ μμΌλ―λ‘ λ°°μ΄μ κ°λ³ λ©μλλ λ©μλλ ν΅νμ§ μκ³ , λΉλ € μ°λ κ² λν μλλ€.
λ¬Έμμ΄μ λ°°μ΄λ‘ λ°κΎΈκ³ μνλ μμ
μ μνν ν λ€μ λ¬Έμμ΄λ‘ λ°κΎΈλ Hackμ μ¬μ©νκΈ°λ νλ€. μ΄ μ¬μ©μ Codewarsμμ λ§€μ° νν.. νμ§λ§ μ΄λ¬ν λ°©λ²μ μ λμ½λκ° μμ¬ μλ κ²½μ°(νΉμλ¬Έμ, Multibyte λ±) μ΄ λ°©λ²μ΄ ν΅νμ§ μλλ€.
μκ°μ λ¬λ¦¬νμ¬ μμ μ΄ λΉλ²ν νμν λ¬Έμμ΄μ΄λΌλ©΄ λ¬Έμ λ¨μλ‘ μ μ₯νλ λ°°μ΄λ‘ μ·¨κΈνλκ² λ λμ μ μλ€.
Comparing strings(λ¬Έμμ΄ λΉκ΅)
less-thanκ³Ό greater-than μ°μ°μ
λ§μ μ¬μ©νμ¬ λ¬Έμμ΄μ λΉκ΅ν μ μλ€.
const a = "a";
const b = "b";
if(a === b) console.log(`${a} and ${b} are equal.`);
if(a > b) console.log(`${a} is gerater than ${b}`);
if(a < b) console.log(`${a} is less than ${b}`);
String μΈμ€ν΄νΈμ μμλ localeCompare()
λ©μλλ₯Ό μ¬μ© ν μ μλ€.
native
νΉμ λΈλΌμ°μ μ μ’ μλμ§ μμ ECMAScript λͺ μΈμ λ΄μ₯κ°μ²΄λ₯Ό λ§νλ€. (Window, Button λ±μ μ μΈ)
Stirng()μ ν¬ν¨νμ¬ Number(), Boolean(), Array(), Object(), Function(), RegExp(), Dat(), Error(), Symbol()
κ°μ₯ λ§μ΄ μ°λ λ€μ΄ν°λΈ λ€μ΄ν°λΈλ λ΄μ₯ ν¨μμ΄λ€.
native prototype
λ΄μ₯ λ€μ΄ν°λΈ μμ±μλ κ°μμ .prototype κ°μ²΄λ₯Ό κ°μ§λ€.(Array.prototype, String.prototype)
prototype κ°μ²΄μλ ν΄λΉ κ°μ²΄μ νμ νμ λ³λ‘ κ³ μ ν λ‘μ§μ΄ λ΄κ²¨ μλ€.
λ¬Έμμ΄ μμ κ°μ λ°μ±μΌλ‘ νμ₯ν κ²κΉμ§ ν¬ν¨νμ¬ λͺ¨λ String κ°μ²΄λ κΈ°λ³Έμ μΌλ‘ Stirng.prototype κ°μ²΄μ μ μλ λ©μλμ μ κ·Ό ν μ μλ€. νλ‘ν νμ μμ(prototype Delegation) λλΆμ λͺ¨λ λ¬Έμμ΄μ΄ λ©μλλ€μ κ°μ΄ μΈ μ μλ€.
Stringμ "λΆλ³ κ° Immutable"μ΄κΈ° λλ¬Έμ λ¬Έμμ΄ κ°μ λ³κ²½νλ λ©μλλ μλ€. μμ μ΄ μΌμ΄λλ©΄ μλ‘μ΄ κ°μ μμ±νλ€.
νλ‘ν νμ μ λ³κ²½ν μλ μμ§λ§, λ³κ²½νμ§ μλκ² μ’λ€.
Distinction between string primitives and String objects
string primitivesμ string objectλ μλ‘ λ€λ₯΄κ² μ·¨κΈνλ€.
primitive strings
λ¬Έμμ΄ λ¦¬ν°λ΄(μμ λ°μ΄νλ ν° λ°μ΄ν)κ³Ό μμ±μ μμ΄(new ν€μλ μμ΄) String μ νΈμΆνμ¬ λ°νν λ¬Έμμ΄
const stringPrimitive = "string primitve";
const stringObject = new String('string object');
typeof stringPrimitive // "string"
typeof stringObject // "object"
stringPrimitive instanceof String // false
stringObject instanceof String // true
// The toString() μ λ¬Έμμ΄μ λ°ννλ objectμ λνμ μΈ λ°©λ²
// μ΄ λ©μλκ° μ¬μ©μ μ§μ κ°μ²΄μμ μ¬μ μλμ§ μμΌλ©΄ toString()μ "[object type]"μ λ°νν©λλ€. μ¬κΈ°μ typeμ object typeμ
λλ€.
Object.prototype.toString.call(stringPrimitive) // "[object String]"
Object.prototype.toString.call(stringObject) // "[object String]"
new String('string object')
μμ±μμ κ²°κ³Όλ μμκ° 'string object'
λ₯Ό κ°μΌ object wrapper μ΄λ€.
typeof stringObject // "object"
μ΄ κ²°κ³Ό κ°μ 보면 μμ μ κ°μΌ μμκ°μ νμ
μ΄ μλλΌ objectμ νμ νμ
μ κ°κΉλ€.
String {"string object"}
0: "s"
1: "t"
2: "r"
3: "i"
4: "n"
5: "g"
6: " "
7: "o"
8: "b"
9: "j"
10: "e"
11: "c"
12: "t"
length: 13
__proto__: String
[[PrimitiveValue]]: "string object"
console.logλ‘ νμΈνμ λ λͺ¨μ΅ (λΈλΌμ°μ λ§λ€ λ€λ₯΄λ€)
String, Number, Boolean κ°μ λ¨μ primitiveλ boxing
κ³ μ μ κ±°μΉλ€.
Object.prototype.toString.call(stringPrimitive) // "[object String]"
String
μΌλ‘ νμλ κ²μ 보μ ν΄λΉ κ°μ²΄ λνΌλ‘ μλ λ°μ±λ¨μ μ μ μλ€.
Wrapper Boxing
μμκ°μ νλ‘νΌν°λ λ©μλκ° μμΌλ―λ‘ μ κ·ΌνκΈ° μν΄μλ μμ κ°μ κ°μ²΄ λ νΌλ‘ κ°μΈμΌνλλ° -> μ΄λ₯Ό μλ°μ€ν¬λ¦½νΈκ° μλμ μΌλ‘ ν΄μ€λ€.
κ·Έλ λ€λ©΄?
const str = "string";
for(let i = 0; i < str.length; i++) {
console.log(str.charAt(i));
}
str.lengthλ κ°μ²΄λ‘ κ°μΈλ μΌμ΄ μκΈ°λκΉ μ²μλΆν° κ°μ²΄λ₯Ό μμ±ν μ μλλ‘ String Objectλ‘ μ°λκ² λ μ’μκΉ?
λ΅μ λ!
λΈλΌμ°μ κ° μ€μ€λ‘ μ΅μ ν νλ€.
κ°λ°μκ° μ μ΅μ ν(pre-Opimize)νκ² λλ€λ©΄ μ€νλ € λ λλ €μ§ μ μλ€.
μ§μ κ°μ²΄ ννλ‘ μ¨μΌν μ΄μ λ κ±°μ μλ€. μμ보기 μ½κ² μμ κ°μ μ¬μ©νμ
μλμΌλ‘ μμ κ°μ λ°μ±νκ³ μ νλ€λ©΄ Object()ν¨μλ₯Ό μ¬μ©νμ
const stringPrimitive = "string primitve";
const stringObject = new String('string object');
const objSting = Object("string");
typeof stringPrimitive // "string"
typeof stringObject // "object"
typeof objSting // "object"
stringPrimitive instanceof String // false
stringObject instanceof String // true
objSting instanceof String // true
Object.prototype.toString.call(stringObject) // "[object String]"
Object.prototype.toString.call(objSting) // "[object String]"
κ°μ²΄ λνΌλ‘ μ§μ λ°μ±νλ건 κΆνμ§ μλλ€.
νμ§λ§ λ§μ½ new Boolean(false
κ°μ κ²½μ° κ°μ²΄ λνΌλ‘ truthy κ°μ΄ λλ€. μ΄λ°κ²½μ°λ±μ λλΉνμ¬ Object()λ‘ νμ
μ°Έκ³
You Don't Know JS: νμ κ³Ό λ¬Έλ², μ€μ½νμ ν΄λ‘μ
https://maximdenisov.gitbooks.io/you-don-t-know-js/content/types_&_grammar/natives.html
Last updated
Was this helpful?