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(๋ฌธ์ž์ ‘๊ทผ)

  1. charAt() ๋ฉ”์„œ๋“œ ์ด์šฉํ•˜๊ธฐ

    return 'cat'.charAt(1); // returns "a"
  2. 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"]
  1. ๋ฌธ์ž์—ด์€ "๋ถˆ๋ณ€ ๊ฐ’ Immutable"์ด์ง€๋งŒ ๋ฐฐ์—ด์€ "๊ฐ€๋ณ€๊ฐ’ Mutable"์ด๋‹ค.

    str[1]๋ฒˆ์ฒ˜๋Ÿผ ํŠน์ •๋ฌธ์ž๋ฅผ ์ ‘๊ทผํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์—์„œ ์œ ํšจํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

    ์‹ค์ œ ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ 7์€ ์ด๋ฅผ ๋ฌธ๋ฒ• ์—๋Ÿฌ๋กœ ์ธ์‹ํ•œ๋‹ค.

    str.charAt(1)๋กœ ์ ‘๊ทผํ•˜๋Š”๊ฒŒ ๋งž๋‹ค.

  2. ๋ฌธ์ž์—ด์€ ๋ถˆ๋ณ€ ๊ฐ’์œผ๋กœ ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ๋Š” ๊ทธ ๋‚ด์šฉ์„ ๋ฐ”๋กœ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์€ ์ƒ์„ฑํ•œ ํ›„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐฐ์—ด๋ฉ”์„œ๋“œ๋Š” ๊ทธ ์ž๋ฆฌ์—์„œ ์ˆ˜์ •ํ•œ๋‹ค.

๋ฌธ์ž์—ด์„ ๋‹ค๋ฅผ ๋•Œ ์œ ์šฉํ•œ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋Š” ๋ฌธ์ž์—ด์— ์“ธ ์ˆ˜ ์—†์ง€๋งŒ, ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ๋ถˆ๋ณ€ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋ฅผ ๋นŒ๋ ค ์“ธ ์ˆ˜ ์žˆ๋‹ค.

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๋กœ ์“ฐ๋Š”๊ฒŒ ๋” ์ข‹์„๊นŒ?

๋‹ต์€ ๋†‰!

  1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์Šค์Šค๋กœ ์ตœ์ ํ™” ํ•œ๋‹ค.

  2. ๊ฐœ๋ฐœ์ž๊ฐ€ ์„  ์ตœ์ ํ™”(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()๋กœ ํ•˜์Ÿˆ

์ฐธ๊ณ 

Last updated

Was this helpful?