대소문자를 구분
변수를 선언하는 것과 할당하는 것을 따로해야함
let
- 블록 스코프(block scope)를 갖는 지역 변수를 선언 (블록 : 중괄호, 중괄호 사이의 영역)
let number = 10 // 선언 및 초기값 할당
number = 20 // 재할당
let number = 30 // 재선언 불가능
let abc // 초기값 없이 선언 가능 undefiend
const
- 블록 스코프를 갖는 지역 변수를 선언
const array = [1, 2, 3]
array[0] = 100
console.log(array) // [100, 2, 3] array의 주소를 할당한 것이기 때문에 가능
array = [101, 2, 3] // 이건 불가
값
이 복사 const bar = 'bar'
console.log(bar) // bar
bar.toUpperCase() // 이때만 반환
console.log(bar) // bar
let a = 10
let b = a
b = 20
console.log(a) // 10
console.log(b) // 20
주소
가 복사 const obj1 = { name: 'Alice', age: 30 }
const obj2 = obj1 // obj1의 주소를 obj2에 할당해준 것
obj2.age = 40
console.log(obj1.age) // 40
console.log(obj2.age) // 40
Number
const a = Infinity
const b = -Infinity
const c = NaN
const firstName = 'Tony'
const lastName = 'Stark'
const fullName = firstName + lastName
console.log(fullName) // TonyStart
${expression}
'으로 const age = 100
const message = `홍길동은 ${age}세 입니다`
console.log(message) // 홍길동은 100세입니다.
의도적으로
표현할 때 사용 let a = null
console.log(a) // null
let b
console.log(b) // undefined
typeof()
자동 형변환 규칙
에 따라 true 또는 false로 변환됨데이터 타입 | false | true |
---|---|---|
undefiend | 항상 false | X |
null | 항상 false | X |
Number | 0, -0, NaN | 나머지 모든 경우 |
undefiend | 빈 문자열 | 나머지 모든 경우 |
let a = 0
a += 10
console.log(a) // 10
a *= 10
console.log(a) // 100
3 > 2 // true
'Z' > 'a' // true
'가' < '나' // true
console.log('1' == 1) // true
console.log(0 == false) // true
console.log('1' == 1) // false
console.log(0 == false) // false
// 단축평가의 결과가 반환되는 것
1 && 0 // 0
4 && 7 // 7
1 || 0 // 1
4 || 7 // 4
조건 표현식의 결과값을 boolean 타입으로 변환 후 참/거짓을 판단
const name = 'customer'
if (name === 'admin') {
console.log('1')
} else if (name === 'customer') {
console.log('2')
} else {
console.log('3')
}
// 조건 연산자
const person = 100
if (person > 17) {
return 'Yes'
} else {
return 'No'
}
// person > 17 ? 'Yes' : 'No'
조건문이 참이면 문장을 계속해서 수행
while (조건문) {
// do something
}
let i = 0
while(i < 6) {
console.log(i)
i += 1
}
특정한 조건이 거짓으로 판별될 때까지 반복
for ([초기문]; [조건문]; [증감문]) {
// do something
}
for (let i = 0; i < 6; i++) {
console.log(i)
}
객체의 열거 가능한 속성(property)에 대해 반복 (자바스크립트의 key)
for (variable in object) {
statement
}
// for ... in
const fruits = {
a: 'apple',
b: 'banana'
}
for (const property in fruits) {
console.log(property) // a b
console.log(fruits[property]) // apple banana
}
Object(객체)
에서만 사용순서가 없는
배열 느낌 const foods = {
fruit: 'banana',
drink: 'juice',
snack: 'kitkat'
}
for (food in foods) {
console.log(food) // fruit, drink, snack (key값만 출력됨)
console.log(foods[food]) // value값만 출력됨
console.log(`${food} : ${foods[food]}`)
}
반복 가능한 객체
(순서가 있는 : 배열, 문자열 등)에 대해 반복 (반복 가능한 객체 -> 순서가 있음=인덱스)
iterable
for (variable in object) {
statement
}
// for ... of
const numbers = [0, 1, 2, 3]
for (const number of numbers) {
console.log(number) // 0, 1, 2, 3
}
// for ... of, for ... in
const numbers2 = ['a', 'b', 'c', 'd']
for (const number of numbers2) {
console.log(number) // a, b, c, d
}
for (const number in numbers2) {
console.log(number) // 0, 1, 2, 3
}
for 문
for ... in, for ... of
키워드 | 연관 키워드 | 스코프 |
---|---|---|
while | break, continue | 블록 스코프 |
for | break, continue | 블록 스코프 |
for...in | break, continue, object 순회 | 블록 스코프 |
undefiend | break, continue, iterable 순회 | 블록 스코프 |
console.log(name) // undefined => 선언 이전에 참조
var name = '홍길동' // 선언