Chapter 04: ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด (Template literals)

๐Ÿ’ก ๋„์„œ ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•ต์‹ฌ ๊ฐ€์ด๋“œ๋ฅผ ์ฝ๊ณ  ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

4.1 ๋ฌธ์ž์—ด ์‚ฝ์ž…


// ES5
var name = "Alberto";
var greeting = 'Hello my name is ' + name;

console.log(greeting);
// Hello my name is Alberto

// ES6
let name  = "Alberto";
const greeting = `Hello my name is ${name}`;

console.log(greeting);
// Hello my name is Alberto

4.2 ํ‘œํ˜„์‹ ์‚ฝ์ž…


// ES5
var a = 1;
var b = 10;
console.log('1 * 10 is ' + ( a * b));
// 1 * 10 is 10

// ES6
var a = 1;
var b = 10;
console.log(`1 * 10 is ${a * b}`);
// 1 * 10 is 10

4.3 ์—ฌ๋Ÿฌ ์ค„ ๋ฌธ์ž์—ด ์ƒ์„ฑ


// ES5
// ๊ฐ ํ–‰๋งˆ๋‹ค backslash ์ถ”๊ฐ€ ํ•„์š”
var text = "hello, \
my name is Alberto \
how are you?\ "

// ES6
const content = `hello,
my name is Alberto
how are you?`;

4.4 ์ค‘์ฒฉ ํ…œํ”Œ๋ฆฟ


const people = [{
    name: 'Alberto',
    age: 27
},{
    name: 'Caroline',
    age: 27
},{
    name: 'Josh',
    age: 31
}];

const markup = `
<ul>
  ${people.map(person => `<li>  ${person.name}</li>`)}
</ul>
`;
console.log(markup);

// <ul>
//   <li>  Alberto</li>,<li>  Caroline</li>,<li>  Josh</li>
// </ul>

4.5 ์‚ผํ•ญ ์—ฐ์‚ฐ์ž ์ถ”๊ฐ€ํ•˜๊ธฐ


const artist = {
  name: "Bon Jovi",
  age: 56,
};

// artist ๊ฐ์ฒด์— song ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ๋ฌธ์žฅ์— ์ถ”๊ฐ€ํ•˜๊ณ , ์—†์œผ๋ฉด ์•„๋ฌด ๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Œ
const text = `
  <div>
    <p>  ${artist.name} is ${artist.age} years old ${artist.song ? `and wrote the song ${artist.song}` : '' }
    </p>
  </div>
`
// <div>
//  <p>  Bon Jovi is 56 years old
//  </p>
// </div>
const artist = {
  name: "Trent Reznor",
  age: 53,
  song: 'Hurt'
};
// <div>
//   <p>  Trent Reznor is 53 years old and wrote the song Hurt
//   </p>
// </div>

4.6 ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์— ํ•จ์ˆ˜ ์ „๋‹ฌํ•˜๊ธฐ


๋‹ค์Œ ์˜ˆ์ œ ์ฝ”๋“œ์ฒ˜๋Ÿผ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ๋‚ด์— ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

const groceries = {
  meat: "pork chop",
  veggie: "salad",
  fruit: "apple",
  others: ['mushrooms', 'instant noodles', 'instant soup'],
}

function groceryList(others) {
  return `
    <p>
      ${others.map( other => ` <span>${other}</span>`).join('\n')}
    </p>
  `;
}

const markup = `
  <div>
    <p>${groceries.meat}</p>
    <p>${groceries.veggie}</p>
    <p>${groceries.fruit}</p>
    <p>${groceryList(groceries.others)}</p> // ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ๋‚ด์— ํ•จ์ˆ˜ ์ „๋‹ฌ
  <div>
`
//  <div>
//     <p>pork chop</p>
//     <p>salad</p>
//     <p>apple</p>
//     <p>
//     <p>
//        <span>mushrooms</span>
//        <span>instant noodles</span>
//        <span>instant soup</span>
//     </p>
//   </p>
//   <div>

4.7 ํƒœ๊ทธ๋œ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด


ํ•จ์ˆ˜๋ฅผ ํƒœ๊ทธํ•˜์—ฌ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์„ ์‹คํ–‰ํ•˜๋ฉด ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ๋‚ด๋ถ€์— ์žˆ๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์ด ํƒœ๊ทธ๋œ ํ•จ์ˆ˜์˜ parameter๋กœ ์ œ๊ณต๋œ๋‹ค.

let person = "Alberto";
let age = 25;

function myTag(strings,personName,personAge){
  let str = strings[1];
  let ageStr;

  personAge > 50 ? ageStr = "grandpa" : ageStr = "youngster";

  return personName + str + ageStr;
}

let sentence = myTag`${person} is a ${age}`;
console.log(sentence);
// Alberto is a youngster

์ฐธ๊ณ