μ«μ(Number) | μ«μ. μ μμ μ€κ΅¬ κ΅¬λΆ μμ΄ νλμ μ«μ νμ λ§ μ‘΄μ¬ |
λ¬Έμμ΄(String) | λ¬Έμμ΄ |
λΆλ¦¬μΈ(Boolean) | λ Όλ¦¬μ μ°Έ(true)κ³Ό κ±°μ§(false) |
undefined | var ν€μλλ‘ μ μΈλ λ³μμ μ묡μ μΌλ‘ ν λΉλλ κ° |
null | κ°μ΄ μλ€λ κ²μ μλμ μΌλ‘ λͺ μν λ μ¬μ©νλ κ° |
μ¬λ²(Symbol) | ES6μμ μΆκ°λ 7λ²μ§Έ νμ |
function λΌλ©΄λμ΄κΈ°() {
λλΉμλ£κΈ°(λ¬Ό500cc, 건λμμ€ν);
λμΈλ€();
λλΉμλ£κΈ°(λ©΄, λΆλ§μ€ν)
λμΈλ€();
λΆμλλ€();
κ·Έλ¦μλ΄λλ€();
}
λΌλ©΄λμ΄κΈ°();
// λ§μ½ λ©΄μ΄ κΌ¬λ€κΌ¬λ€ν λΌλ©΄μ λμ΄κ³ μΆλ€λ©΄?
// μλ‘μ΄ ν¨μ μμ±
function λΌλ©΄κΌ¬λ€κΌ¬λ€λμ΄κΈ°() {
λλΉμλ£κΈ°(λ¬Ό500cc, 건λμμ€ν);
λμΈλ€();
λλΉμλ£κΈ°(λ©΄, λΆλ§μ€ν)
μ‘°κΈλμΈλ€();
λΆμλλ€();
κ·Έλ¦μλ΄λλ€();
}
λΌλ©΄κΌ¬λ€κΌ¬λ€λμ΄κΈ°()
// μλ‘μ΄ ν¨μλ₯Ό λ§λ€μ§ μκ³ κΈ°μ‘΄ ν¨μμ μΈμλ₯Ό μ λ¬
function λΌλ©΄λμ΄κΈ°(μκ°) {
λλΉμλ£κΈ°(λ¬Ό500cc, 건λμμ€ν);
λμΈλ€();
λλΉμλ£κΈ°(λ©΄, λΆλ§μ€ν)
λμΈλ€(μκ°);
λΆμλλ€();
κ·Έλ¦μλ΄λλ€();
}
λΌλ©΄λμ΄κΈ°(μκ°);
(κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μμ) κ°μ²΄λ ν΄λμ€μ μΈμ€ν΄μ€μ΄λ€.
μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ
κΈ°λ°(prototype based) κ°μ²΄μ§ν₯ μΈμ΄
=> ν΄λμ€κ° νμμλ(class free) κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° μΈμ΄
=> ES6μμ ν΄λμ€κ° λμ
λ¨
μλ°μ€ν¬λ¦½νΈλ₯Ό ꡬμ±νλ κ±°μ "λͺ¨λ κ²"μ΄ κ°μ²΄
=> μμ κ°μ μ μΈν λλ¨Έμ§ κ°μ λͺ¨λ κ°μ²΄
κ°μ²΄(object) : 0κ° μ΄μμ νλ‘νΌν°λ‘ ꡬμ±λ μ§ν©, νλ‘νΌν°λ ν€(key)μ κ°(value)μΌλ‘ ꡬμ±
let myString = new String('hello');
// μ¬κΈ°μ myStringμ Stringμ λ°λΌλ³΄κ³ ? μλ μΈμ€ν΄μ€
=> myStringμ λ€λ₯Έ λ§λ‘ 무μμ΄λΌκ³ ν κΉ? κ°μ²΄
κ°μ²΄λ₯Ό μΈμ€ν΄μ€λΌκ³ λ νκ³ μΈμ€ν΄μ€λ₯Ό κ°μ²΄λΌκ³ λ νλ€.
μΈμ€ν΄μ€λ κ°μ²΄λ‘ λ΄λ 무방νλ€. μμ±μκ° κ°μ²΄λ₯Ό λ§λ€ λ, κ·Έ μμ μ κ°μ²΄λ₯Ό μΈμ€ν΄μ€λΌκ³ νκΈ° λλ¬Έμ΄λ€.
- μλ°μ€ν¬λ¦½νΈμ μμ±μμ μΈμ€ν΄μ€
μΈμ€ν΄μ€ : μμ±μ ν¨μμ μν΄ μμ±λ κ°μ²΄/κ²°κ³Όλ¬Ό
μμ±μ ν¨μ(constructor) : new μ°μ°μμ ν¨κ» νΈμΆνμ¬ κ°μ²΄(μΈμ€ν΄μ€)λ₯Ό μμ±νλ ν¨μ
hello
λ 무μμΈκ°μ?
=> κ°μ²΄ 리ν°λ΄, λ¬Έμμ΄, μμ κ°, μ μ¬λ°°μ΄κ°μ²΄, μΈμ€ν΄μ€ λΌκ³ λΆλ₯Ό μ μλ€.
this
this
λ νμ¬ μ€νλλ μ½λμ μ€ν 컨ν
μ€νΈλ₯Ό κ°λ¦¬ν¨λ€.=> aboutThis()
ν¨μλ window
κ°μ²΄(μ μκ°μ²΄) μμ μκ³ μ΄ μμμ νΈμΆλμμΌλ―λ‘ aboutThis()
ν¨μ λ΄μμ this
λ window
λ₯Ό κ°λ¦¬ν¨λ€.
=> Node.js νκ²½μμλ global
μ κ°λ¦¬ν¨λ€.
=> myObj
μμ func()
ν¨μλ myObj
μμ μκ³ μ΄ μμμ νΈμΆλμμΌλ―λ‘ myObj.func()
ν¨μ λ΄μμ this
λ myObj
λ₯Ό κ°λ¦¬ν¨λ€.
=> μ½μμ μΆλ ₯λ {val: 100, func: Ζ}
μμ²΄κ° myObj
μ λ΄μ©μ΄λ€.
ν¨μ νΈμΆ λ°©μ | thisκ° κ°λ¦¬ν€λ κ° |
---|---|
μΌλ° ν¨μλ‘μ νΈμΆ | μ μκ°μ²΄ |
λ©μλλ‘μ νΈμΆ | λ©μλλ₯Ό νΈμΆν κ°μ²΄(λ§μΉ¨ν μμ κ°μ²΄) |
=> this
μ λν λ΄μ©μ μΌλ¨ μ¬κΈ°κΉμ§ μ 리!
μ°Έκ³
- λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive - μ΄μ λͺ¨ μ
- JavaScript κ°λ°μλΌλ©΄ κΌ μμμΌ ν this - μ§κ·Έμ¬κ·Έ
- JavaScript this binding μ 리
var x = "global x";
var y = "global y";
function outer() {
var z = "outer's local z";
console.log(x); // global x
console.log(y); // global y
console.log(z); // outer's local z
function inner() {
var x = "inner's local x";
console.log(x); // inner's local x
console.log(y); // global y
console.log(z); // outer's local z
}
inner();
}
outer();
console.log(x); // global x
console.log(z); // ReferenceError: z is not defined
if (true) {
// μ½λ λΈλ‘ λ΄μμ var x μ μΈ
// μλ°μ€ν¬λ¦½νΈλ λΈλ‘ λ 벨 μ€μ½νλ₯Ό μ¬μ©νμ§ μμΌλ―λ‘
// ν¨μ λ°μμ μ μΈλ λ³μλ μ½λ λΈλ‘ λ΄μμ μ μΈλμλ€ ν μ§λΌλ λͺ¨λ μ μ μ€μ½νλ₯Ό κ°μ§
var x = "global x";
}
console.log(x); // global x
var
ν€μλλ‘ μ μΈν λ³μλ μ€λ‘μ§ ν¨μμ μ½λ λΈλ‘λ§μ μ§μ μ€μ½νλ‘ μΈμ νλ ν¨μ λ 벨 μ€μ½νλ₯Ό λ°λ¦let
μ λ±μ₯μΌλ‘ λΈλ‘ λ 벨 μ€μ½νλ₯Ό νμ±νλ κ²μ΄ κ°λ₯ν΄μ§let
ν€μλλ‘ μ μΈν λ³μλ λͺ¨λ μ½λ λΈλ‘(ν¨μ, ifλ¬Έ, forλ¬Έ, whileλ¬Έ, try/catchλ¬Έ λ±)μ μ§μ μ€μ½νλ‘ μΈμ νλ λΈλ‘ λ // μ μ μ€μ½ν
let i = 10;
// ν¨μ λ 벨 μ€μ½ν
function func() {
let i = 100;
// λΈλ‘ λ 벨 μ€μ½ν
for (let i = 1; i < 3; i++) {
console.log(i); // 1 2
}
console.log(i); // 100
}
func();
console.log(i); //10
// ν΄λ‘μ Έ, closure : νμ
// ν΄λ‘μ Έλ ν
ν¬λμ΄λ€ => νμλ 곡κ°μ λ°μ΄ν°μ μ κ·ΌνκΈ° μν ν
ν¬λ
// νμλ 곡κ°μ μ κ·Όν μ μλ ν¨μ
function myFunction() {
var val1 = "hello";
}
// myFunctionμμ μλ val1μ ν¨μ λ°μμ μΈ μ μμ΅λλ€.
// val1μ myFunction ν¨μ μμ νμλμ΄ μλ€.
function myFunction2() {
var val2 = "hello";
return {
//리ν΄μ μ΄μ©ν΄μ ν¨μ μμ κ°μ λ°μΌλ‘ λΊ μ μλ€.
// ν¨μλ κ°μ²΄λ 리ν΄ν μ μλ€
getVal2: function () {
// getVal1μ΄λΌλ ν€μ μ°κ²°λ ν¨μκ° μλ€.
return val2; // ν¨μλκΉ λ¦¬ν΄μ ν μ μμμμ μ΄λ val2μ 리ν΄ν΄μ€μ
},
};
}
let result = myFunction2();
console.log(result.getVal2()); // hello
// μλλλ‘λΌλ©΄ μ val2λ μΈλΆμμ μ κ·Όνμ§ λͺ»νλ건λ°, ν΄λ‘μ λ₯Ό ν΅ν΄μ getVal2μ ν΅ν΄μλ§ val2μ μ κ·Όν μ μκ² ν μ μμ΅λλ€
function randomNum(min, max) {
return Math.floor(Math.random() * (max - min) + min);
}
// λ΄κ° μμ±ν μ½λ
// Setμ μ΄μ©ν΄ μ€λ³΅ μ κ±°
let lottoNum = new Set();
// randomNumμ lottoNum.sizeκ° 6μ΄ λ λκΉμ§ λ½κΈ°
while (lottoNum.size < 6) {
lottoNum.add(randomNum(1, 46));
}
// μ€λ¦μ°¨μμΌλ‘ μ λ ¬
console.log([...lottoNum].sort((a, b) => a - b));
// λ€λ₯Έ λ°©λ² - forEach
let lottoArr = [];
function lottoGenerator() {
while (lottoArr.length < 6) {
let result = randomFunc(1, 46);
let isGot = false;
// μ€λ³΅ νλ¨
lottoArr.forEach((el) => {
if (el === result) {
isGot = true;
}
});
// μ€λ³΅μ΄ μλ€λ©΄ λ°°μ΄μ μΆκ°
if (!isGot) {
lottoArr.push(result);
}
}
return lottoArr;
}
console.log(lottoGenerator());
// λ€λ₯Έ λ°©λ² - includes
let lottoArr = [];
function lottoGenerator() {
while (lottoArr.length < 6) {
let result = randomFunc(1, 46);
let isGot = false;
if (!lottoArr.includes(result)) {
lottoArr.push(result);
}
}
return lottoArr;
}
console.log(lottoGenerator());
<!DOCTYPE html>
<html>
<head>
<style>
.red { color: #ff0000; }
.blue { color: #0000ff; }
</style>
</head>
<body>
<div>
<h1>Cities</h1>
<ul>
<li id="one" class="red">Seoul</li>
<li id="two" class="red">London</li>
<li id="three" class="red">Newyork</li>
<li id="four">Tokyo</li>
</ul>
</div>
</body>
</html>
[μΆμ²: Poiema Web - DOM tree]
document
κ°μ²΄λ₯Ό ν΅ν΄ HTML λ¬Έμμ μ κ·Όν μ μλ€.document
λ λΈλΌμ°μ κ° λΆλ¬μ¨ μΉνμ΄μ§λ₯Ό λνλ΄λ©°, DOM treeμ μ§μ
μ (Entry point) μν μ μν// ν΄λΉνλ Idλ₯Ό κ°μ§ μμμ μ κ·Ό
document.getElementById();
// ν΄λΉνλ λͺ¨λ μμμ μ κ·Ό
document.getElementsByTagName();
// ν΄λΉνλ ν΄λμ€λ₯Ό κ°μ§ λͺ¨λ μμμ μ κ·Ό
document.getElementsByClassName();
// css μ νμλ‘ λ¨μΌ μμμ μ κ·Ό
document.querySelector("selector");
// css μ νμλ‘ μ¬λ¬ μμμ μ κ·Ό
document.querySelectorAll("selector");
target.addEventListener(type, listener)
type
: click, mouseover mouseut, wheel λ± λ€μν μ΄λ²€νΈ κ°μ§listener
ν¨μμ μΈμμλ μ΄λ²€νΈμ λν μ λ³΄κ° λ΄κΉ<button class="btn">Click me!</button>
const btn = document.querySelector("button");
//const btn = document.querySelector(".btn"); μμ κ°μ μμ μ κ·Ό
btn.addEventListener("click", function() {
console.log("hello world");
})
<button class="btn-change">Change color, plz!</button>
const changeBtn = document.querySelector(".btn-change");
changeBtn.addEventListener("click", function() {
// changeBtnμ "blue"λΌλ ν΄λμ€ μΆκ°
changeBtn.classList.add("blue");
// changeBtn.classList.remove("blue"); "blue"λΌλ ν΄λμ€ μ κ±°
// changeBtn.classList.toggle("blue"); "blue"λΌλ ν΄λμ€ ν κΈ. "blue" ν΄λμ€κ° μλ€λ©΄ ν΄λμ€λ₯Ό μΆκ°νκ³ , μλ€λ©΄ ν΄λμ€ μ κ±°
// changeBtn.classList.contains("blue"); ν΄λΉ ν΄λμ€κ° μλμ§ νμΈ
})
clear()
λ₯Ό μ
λ ₯ν΄λ μ°¨λ¨λμ΄ λ‘κ·Έκ° μ§μμ§μ§ μκ³ λ³΄μ‘΄λλ€.
thisμ κ΄ν΄μ μ λ§ μ보μμ΅λλ€!!!