JavaScript

문자열

마라랑랑 2022. 5. 24. 08:11

문자열 리터럴

const singleQuote = '';
const doubleQuote = "";
const multiLine = "1\
2\
3\
4\
";


// ES2015+
const backQuote = `
1
2
3
4
5`;

문자열 리터럴은 이러한 방식으로 사용가능하며 백틱을 사용하면 손쉽게 여러행을 거쳐서 사용할 수 있다.

 

const empty = null;
console.log(empty + 'hello')    nullhello

const empty2 = '';
console.log(empty2 + 'hello')    hello

빈문자열을 만들때는 ' ' 로 충분하다.

 

 

문자열에 접근

const str = 'ABC';
str.charAt(2);	'C'
str[2];	'C'
const str2 = 'ABC       '
str2.trim()	'ABC'

charAt() : string 문자열 중 해당하는 순서(0을 기준으로 시작)의 문자 하나만 가져와서 char타입으로 변환해준다.

trim(): 문자열의 공백을 없애준다.

 

const paragraph =
	'The quick brown fox jumps over the lazy dog. If the dog barked, was it really lazy?';
const searchTerm = 'dog';	

paragraph.indexOf(searchTerm);	40
paragraph[40];	'd'
paragraph[41];	'o'
paragraph[42];	'g'

indexof() : 해당 문자열의 위치를 알려준다.

 

문자열로 변환

String(123);    '123'
String(undefined);  'undefined'
String(null);   'null'
String({}); '[object Object]'
String({ name: 'jang' });   '[object Object]'
String([1, 2, 3]);  '1,2,3'

원하는 값을 String()을 사용하여 문자열로 바꾸어 줄 수 있다.

 

JSON.stringify([1, 2, 3]);
JSON.stringify({ name: 'jang' });

객체를 JSON 문자열로 바꾸어 줄 수 있다.

 

['1', 123].toString();  '1,123'

String(true);  		 'true'
Boolean('false');	  true
Boolean(String('false')); true

.toString() 을 통해서도 객체를 문자열로 바꿔줄 수 있다.

 

문자열 병합

function genHello(name) {
	const resultName = name ? name : '이름없음';
	const resultName2 = name || '이름없음';

	return (
		'안녕하세요 ' + resultName + '님 반갑습니다'
	);
}

genHello('Kim');	'안녕하세요 Kim님 반갑습니다'

표현식안에도 문자열끼리 더하기를 사용 할 수 있다.

 

문자열과 배열

'HELLO WORLD'.split('');	['H', 'E', 'L', 'L', 'O', 'W', 'O', 'R', 'L', 'D']
'HELLO,WORLD'.split(',');	['HELLO', 'WORLD']

문자열을 하나하나 분해하려면 .split(' ') 을 사용하며

콤마(,) 를 기준으로 문자열을 분해하려면 .split('.')을 사용한다

 

const helloWorld = 'HELLO WORLD';
[...helloWorld];	['H', 'E', 'L', 'L', 'O', 'W', 'O', 'R', 'L', 'D']

join();
split();
[...]

위와 같은 방식들로도 문자열을 분해할 수 있다.

 

'HELLO WORLD'.length;   // primitive
['1', 2, 3].length;     // Reference, Object

원시 타입과 객체 타입 모두 length 속성을 사용할 수 있다.

 

Template Literals 

템플릿 리터럴은 내장된 표현식을 허용하는 문자열 리터럴있다. 여러 줄로 이뤄진 문자열과 문자 보간기능을 사용할 수 있다.

 

1. 멀티라인 (개행)이 자유로움 

2. Basic String Formatting => 보간법 활용 => 표현식을 문자열로 포함

3. HTML Escaping: 안전하게 사용하도록 도움 (XSS, SQL Injection)

 

const htmlTemplate =
	'<div>' + '안녕하세요' + '</div>';

body.innerHTML = htmlTemplate;

이러한 해킹에 취약한 환경을 아래와 같이 보안해준다.

function genHello(name) {
	// return '안녕하세요\n' + name + '\n님\n 반갑습니다';
	return `안녕하세요
    ${name}
    님
    반갑습니다`;
}

genHello('Jang');

작은 따옴표 대신에 `백틱`을 사용하여 줄바꿈을 자유로이 할 수 있게 되었다.

문자열 중간에 대입하는 변수를 + 대신에 ${변수값} 으로 간단히 사용할 수 있다.

 

 

function genDivision(innerText) {
	return `<div>${innerText}</div>`;
}

const divTag = genDivision('Jang');
body.innerHTML = divTag;

위와 같이 HTML 태그를 바디에 삽입할 수 있다.