{
let stringWithString = new String("string1");
stringWithString.newValue = "123" // 요게 가능
return stringWithString.newValue
}
{
let strigWithTemplete = "string2"
strigWithTemplete.newValue = "456" // 에러!
return strigWithTemplete.newValue
}
// censor
const censor = (str) => "*".repeat(str.length)
// 이렇게 모든 변수마다 censor 를 불러줘야 함.
let pwInput = `this is my pw ${censor(pw)} and secret ket is ${censor(sk)}`;
const pw = "12345"
const sk="abc987"
let t1 = censorTemplete`this is my pw ${pw} and secret ket is ${sk}`
const censorTemplete = (str,...arg) => {
// str = ["this is my pw ", " and secret ket is ", ""]
// arg = [12345,abc987]
return str.reduce(
(acc,e,i) => `${acc}${e}${censor(arg[i]||'')}`
,'')
}
'hello\nWorld'
String.raw`Hello\nWorld` // Hello\nWorld
String.raw`D:\Tei's Folder\tei_file.txt`
String.raw`D:\Tei's Folder\tei_file.txt\`
let result = `line1 \
line2`
// "line1 line2"
let str1 = "123"
let str2 = str1 + "456"
str1 += "456"
코드포인트
라고 하는 숫자랑 문자를 연결해주는 것입니다.U+1F608
입니다. console.log("😈".length) // 2
console.log("😈".split("")) // ["�", "�"]
console.log("😈".charAt(0))// �
console.log("😈"[0]) // �
자바스크립트는 문자열을 다룰때 이스케이스 시퀀스 방식을 사용합니다(UTF-16 코드 단위).
이스케이프 시퀀스의 예시는 \uFF21
같이 이스케이프문자 + 유니코드입니다.
하지만 문제는 이렇게 다룰 수 있는 범위는 \u0000
~\u00FF
라는것입니다...
즉 U+1F608
인 악마는 이 범위를 초과해버리는 것이죠...
이렇게 표현할 수 없는 유니코드는 두개로 쪼개서 대리 쌍
(surrogate pairs)이라는 표로 구하게 됩니다.
이 대리쌍 때문에 정말정말정말정말 많은 문제가 발생합니다...(length, 뒤집기, 문자열 찾기,정규식)
[..."😈"].length // 1
for (let elem of '😈') {
console.log(elem)
}
// for of 는 대리쌍이 아니라 온전한 코드포인트로 순회해줌.
발음기호가 있는 언어에서 대부분 대문자의 경우 발음기호를 넣지 않습니다.
let resume = 'Résumé'
console.log(a.toUpperCase()) // RÉSUMÉ 인데 원래는 RESUME 으로 씀.
이때 'RÉSUMÉ'
과 RESUME
을 equal 비교시 false 가 나오게 됩니다.
이럴떄 localeCompare 를 사용할 수 있습니다.
localeCompare 는 문자열의 대소를 반환하는 함수 (어떤 문자열이 더 앞인지)
'a'.localeCompare('c'); // a 가 c 보다 이전이기때문에 음수.
'a'.localeCompare('a'); // 같으면 0
let resume = 'Résumé'
let resume2 = 'RESUME'
console.log(resume.localeCompare(resume2, 'en', { sensitivity: 'base' })) // 0, 같음
console.log(["Tei", "yaguun", "no"].sort());
//["Tei", "no", "yaguun"]
console.log(["Tei", "yaguun", "no"].sort((a, b) => a.localeCompare(b)))
// ["no", "Tei", "yaguun"]
console.log("short".padStart(12)) // " short"
console.log("longlonglong".padEnd(12)) // "longlonglong"