ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ECMA script๋ฅผ ์ค์ํ๋ฉด์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ณ๋๋ก ์ง์ํ๋ Web API ๋ฑ์ ํฌํจํ ๊ฐ๋ 
- ๋ธ๋ผ์ฐ์  => ๋ ๋๋ง ๋ชฉ์ 
 - Node.js => ์คํํ๊ฒฝ ์ ๊ณต ๋ชฉ์ 
 
- ํ๋์ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
 - ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ณํ๊ธฐ ์ํ ์ด๋ฆ (์๋ณ์์ ์ด๋ฆ)
 
- ์ ์ธ ๋จ๊ณ
 - ์ด๊ธฐํ ๋จ๊ณ
 
๋ณ์ ์ ์ธ๋ถ๋ถ์ JS ๋์์ ์์ด์ ๋ฐํ์ ์คํ ์ ์ธ ์์ค์ฝ๋ ํ๊ฐ ๊ณผ์ ์์ ์คํ๋์ด ํ์ค์ฉ ํด์ํ๋ ๋ฐํ์๊ณผ ๋ค๋ฅด๊ฒ ํ๋ฒ์ ์์ ์ ์ธ๋๋ค.
์ด๋ค ๊ฐ์ ๊ตฌ๋ณํด์ ์๋ณํ ์ ์๋ ๊ณ ์ ํ ์ด๋ฆ
| ์ปดํ์ผ๋ฌ | ์ธํฐํ๋ฆฌํฐ | 
|---|---|
| ์ฝ๋ ์คํ ์  ์์ค์ฝ๋ ์ ์ฒด๋ฅผ ๋ณํ ํ ์คํ | ๋ฐํ์์ ํ์ค ์ฉ ์ฝ๋ ๋ณํ ํ ์คํ | 
| ์คํ ํ์ผ ์์ฑ | ์คํ ํ์ผ ์์ฑX | 
| ์ปดํ์ผ ๋จ๊ณ / ์คํ ๋จ๊ณ ๋ถ๋ฆฌ | ๋ถ๋ฆฌ๋์ง์์ ํ์ค์ฉ ๋ณํ ํ ์คํ | 
| ๋ถ๋ฆฌ๋ก ์ธํ ์ฝ๋ ์คํ์๋ ๋น ๋ฅด๋ค | ์๋ค๊ฐ๋ค ๋ฐ๋ณต ์ํ์ผ๋ก ์ฝ๋ ์คํ ์๋๊ฐ ๋๋ฆฌ๋ค | 
1 ๋จ๊ณ: ์คํ ์ปจํ ์คํธ ์์ฑํ๊ณ , ๋ณ์ ๋ฑ์ ๋ฑ๋กํ๋ ๋จ๊ณ
(์์ค์ฝ๋ ํ๊ฐ ๊ณผ์ )
2 ๋จ๊ณ: ์์ค ์ฝ๋๋ฅผ ํ ์ค์ฉ ์คํํ๋ ๋จ๊ณ
(๋ฐํ์ ํ๊ฒฝ)
์์ํ์ ์ ๊ฒฝ์ฐ ์ฌํ ๋นํ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ์ด์  ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณณ์ด ๋ฐ๋์ง์๊ณ ์๋ก์ด ์ฃผ์์ ์์น์ ์๊ธด๋ค.
ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฒ์ฌํ์ฌ ์ฌ์ฉํ์ง์๋(์ด๋ค ์๋ณ์๋ ์ฐธ์กฐํ์ง์๋) ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ๊ธฐ๋ฅ์ด๋ค.
- ๋งค๋์ง๋ ์ธ์ด : ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น ๋ฐ ํด์ ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์  ์ ์ดํ์ง์์ => JS
 - ์ธ๋งค๋์ง๋ ์ธ์ด : ๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น / ํด์  => C์ธ์ด
 
- ํ๋กํผํฐ : ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฐ
 
1) ํ๋กํผํฐ ํค
2) ํ๋กํผํฐ ๊ฐ- ๋ฉ์๋ : ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํ๊ณ ์กฐ์ํ๋ ๋์
 
- ๊ฐ์ฒด ๋ฆฌํฐ๋ด
 - Object ์์ฑ์ ํจ์
 - ์์ฑ์ ํจ์
 - Object.create ๋ฉ์๋
 - ํด๋์ค
 
const user1 = {
  name: "๋ณด๋ผ",
  isAdmin: false,
};
function User2(name) {
  this.name = name;
  this.isAdmin = false;
}
let user2 = new User2("๋ณด๋ผ");
let user3 = new Object();
user3.name = "๋ณด๋ผ";
user3.isAdmin = false;
let user4 = Object.create(null);
user4.name = "๋ณด๋ผ";
user4.isAdmin = false;
class User5 {
  constructor(name, isAdmin) {
    this.name = name;
    this.isAdmin = isAdmin;
  }
}
const user5 = new User5("๋ณด๋ผ", false);
console.log(user1);
console.log(user2);
console.log(user3);
console.log(user4);
console.log(user5);
๋ชจ๋ ๊ฐ์ name๊ณผ isAdmin์ ํฌํจํ ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ง๋ค.
์๋ณ์ ๋ค์ด๋ฐ ๊ท์น์ ๋ฐ๋ฅด๋ฉด์ ๋ฐ์ดํ๊ฐ ํ์์์ผ๋
์ด๋ฅผ ๋ฐ๋ฅด์ง์์ผ๋ฉด ๋ฐ์ดํ๊ฐ ํ์ํ๋ค ex)last-name
- ๋ง์นจํ ํ๊ธฐ๋ฒ (
 person.name)- ๋๊ดํธ ํ๊ธฐ๋ฒ (
 person['name'])
- Node.js : name์ด ์ด๋์๋ ์์ด์ ReferenceError
 - ๋ธ๋ผ์ฐ์  ํ๊ฒฝ : name์ด๋ผ๋ ์ ์ญ๋ณ์๊ฐ ์๋ฌต์ ์ผ๋ก ์กด์ฌํ์ฌ NaN
 
let x = 1,  y = 2;
const obj = { x, y }	// {x:x,y:y} => {x:1,y:2}
console.log(obj); // {x:1,y:2}
let obj = {
  name: "Lee",
  sayHi: function () {
    console.log(this, "hi");
  },
  sayHi1: () => {
    console.log(this, "hi1");
  },
  sayHi2() {
    console.log(this, "hi2");
  },
};
obj.sayHi();
obj.sayHi1();
obj.sayHi2();
ํ์ดํํจ์๋ฅผ ์ฌ์ฉํ
sayHi1()๋ง ์ ์์ ์ธ obj this๋ฅผ ๊ฐ๋ฅดํค์ง ์๋๋ค
- ๋ถ๋ณ์ฑ ( ๋ถ๋ณ์ฑ O / ๋ถ๋ณ์ฑ X )
 - ๋ณ์์ ์ ์ฅ ( ์ค์ ๊ฐ / ์ฐธ์กฐ ๊ฐ )
 - ๋ณต์ฌ ( ์์ ๊ฐ์ ๋ณต์ฌ / ์ฐธ์กฐ ๊ฐ์ ๋ณต์ฌ )
 
์์๊ฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๋ค
=> ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค ( = ๋ณ์๊ฐ์ ์ฌํ ๋น์ด ๊ฐ๋ฅํ๋ค )
๋ฌธ์์ด์ ๋ฐฐ์ดํํ ์ ๊ทผ์ ๊ฐ๋ฅํ๋ค
๋ฌธ์์ด์ ๋ฐฐ์ดํํ๋ก ๋ฌธ์๋ณ๊ฒฝ์ ๋ถ๊ฐ๋ฅํ๋ค
๋ฌธ์ ๋ณ๊ฒฝ ์์๋ ์๋ก์ด ๋ฌธ์(์ด)๋ก ์ฌํ ๋น ํ์ํ๋ค
์ฌ์ค์ ์ ํํ ๋งํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์๋ ๊ฐ์ ์ํ ์ ๋ฌ ๋ฐ์ ์๋ค
๋จ์ง, (์์) ๊ฐ์ ์ํ ์ ๋ฌ์ธ์ง (์ฐธ์กฐ) ๊ฐ์ ์ํ ์ ๋ฌ์ธ์ง๊ฐ ์ค์ํ ๋ฟ์ด๋ค.
์ฆ, ์ ๋ฆฌํ์๋ฉด ์ฐ๋ฆฌ๊ฐ ํ์์ ์ฐ๋ ๊ฐ์ ์ ๋ฌ๊ณผ ์ฐธ์กฐ์ ์ ๋ฌ์
์ฌ์ค ์์๊ฐ์ ์ ๋ฌ๊ณผ ์ฐธ์กฐ๊ฐ์ ์ ๋ฌ๋ก ์ดํดํ๊ณ
์ค์  ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๊ฐ์ ์ํ ์ ๋ฌ๋ง์ด ์กด์ฌํ๋ค๊ณ ์๊ฐํ์
- ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ณ์ ๋น๊ต : ์ฐธ์กฐ ๊ฐ์ ๋น๊ต
 - ์์ ๊ฐ์ ํ ๋นํ ๋ณ์ : ์์ ๊ฐ์ ๋น๊ต
 
let p = { name : 'L'}
let q = { name : 'L'}
console.log(p === q);		// 1. false
console.log(p.name === q.name);	// 2. true