
JavaScript 기초 문법을 익혀보자!
// 변수
let dog
let variableName
// 객체
const userInfo = { name:'Tom', age:20 }
// 함수
function add() {}
function getName() {}
// 클래스
class User {
constructor(options) {
this.name = options.name
}
}
// 생성자 함수
function User(options) {
this.name = options.name
}
// 값이 바뀌지 않을 상수
const API_KEY = 'my-key'
const PI = Math.PI
// 재할당이 일어나지 않는 변수
const NUMBERS = [1, 2, 3]
let foo // 선언
console.log(foo) // undefined
foo = 11 // 할당
console.log(foo) // 11
let bar = 0 // 선언 + 할당
console.log(bar) // 0
블록 스코프 지역 변수를 선언, 선언과 동시에 원하는 값으로 초기화 할 수 있음let number = 10 // 1. 선언 및 초기값 할당
number = 20 // 2. 재할당
let number = 10 // 1. 선언 및 초기값 할당
let number = 20 // 2. 재선언 불가능
const number = 10 // 1. 선언 및 초기값 할당
number = 20 // 2. 재할당 불가능
const number = 10 // 1. 선언 및 초기값 할당
const number = 20 // 2. 재선언 불가능
let x = 1
if (x === 1) {
let x = 2
console.log(x) // 2
}
console.log(x) // 1
호이스팅 되는 특성으로 인해 예기치 못한 문제 발생 가능함수 스코프(function scope)를 가짐function foo() {
var x = 5
console.log(x) // 5
}
// ReferenceError : x is not defined
console.log(x)
undefined 반환console.log(name) // undefined -> 선언 이전에 참조
var name='홍길동' // 선언
// 위 코드를 암묵적으로 아래와 같이 이해함
var name // undefiend로 초기화
console.log(name)
var name='홍길동' // 선언

const 사용을 권장원시 타입(Primitive type)과 참조 타입(Reference type)으로 분류됨
const a = 13
const b = -5
const c = 3.14
const d = 2.998e8 // 2.998*10^8
const e = Infinity
const f = -Infinity
const g = NaN // Not a Number
const sentence1 = 'Ask and go to the blue' // single quote
const sentence1 = "Ask and go to the blue" // double quote
console.log(sentence1)
console.log(sentence2)
const firstName = 'Tony'
const lastName = 'Stark'
const fullName = firstName + lastName
console.log(fullName)
\n 사용// Bad
const word = "안녕
하세요" // Uncaught SyntaxError : Invalid or unexpected token
// Good
const word1 = "안녕\n하세요"
console.log(word1)
Template Literal(백틱 )을 사용하면 줄바꿈 가능, 문자열 사이에 변수도 삽입 가능$와 중괄호(${expression})로 표기const word2 = `안녕
하세요`
console.log(word2)
const age = 10
const message = `홍길동은 ${age}세 입니다.`
console.log(message)
let lastName = null
console.log(lastName) // null
let firstName // 선언만 하고 할당하지 않음
console.log(firstName) // undefined
[참고] null vs undefined
typeof null // "object"
typeof undefined // "undefined"
true와 falseconst me = {
name : 'jack',
phoneNumber : '01012345678',
'samsung products' : {
buds : 'Galaxy Buds pro',
galaxy : 'Galaxy s99',
}
}
console.log(me.name)
console.log(me['name'])
console.log(me['samsung products'])
console.log(me.samsung products) // 불가능
console.log(me['samsung products'].buds)
array.length 형태로 접근 가능array.length-1로 접근const numbers = [1, 2, 3, 4, 5]
console.log(numbers[0]) // 1
console.log(numbers[-1]) // undefined
console.log(numbers.length) // 5
console.log(numbers[numbers.length-1]) // 5
console.log(numbers[numbers.length-2]) // 4
console.log(numbers[numbers.length-3]) // 3
console.log(numbers[numbers.length-4]) // 2
console.log(numbers[numbers.length-5]) // 1
function 함수명(매개변수) {
// do something
}
// 예시
function add(num1, num2){
return num1 + num2
}
add(2, 7) // 9
변수키워드 함수명 = function(매개변수) {
// do something
}
// 예시
const sub = function (num1, num2) {
return num1 - num2
}
sub(7, 2) // 5
const mySub = function namedSub(num1, num2) {
return num1 - num2
}
mySub(1, 2) // -2
namedSub(1, 2) // ReferenceError : namedSub is not defined

+= 또는 -=과 같이 더 분명한 표현으로 적을 것을 권장let c = 0
c += 10
console.log(c) // 10
c -= 3
console.log(c) // 7
c *= 10
console.log(c) // 70
c++
console.log(c) // 71
c--
console.log(c) // 70
3 > 2 // true
3 < 2 // false
'A' < 'B' // true
'Z' < 'a' // true
'가' < '나' // true
==)암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교const a = 1
const b = '1'
console.log(a==b) // true
console.log(a==true) // true
// 자동 형변환 예시
console.log(8*null) // 0
console.log('5' - 1) // 4
console.log('5' + 1) // 51
console.log('five'*2) // NaN
===)const a = 1
const b = '1'
console.log(a===b) // false
console.log(a==b) // true
console.log(a===Number(b)) // true
&&’ 연산자||’ 연산자!’ 연산자true && false // false
true && true // true
false || true // true
flase || false // false
!true // false
// 단축 평가
1 && 0 // 0
0 && 1 // 0
4 && 7 // 7
1 || 0 // 1
0 || 1 // 1
4 || 7 // 4
:(콜론) 앞의 값이 반환되며 그 반대일 경우 : 뒤의 값이 반환true ? 1 : 2 // 1
false ? 1 : 2 // 2
const result = Math.PI > 4 ? 'Yep':'Nope'
console.log(result) // Nope
const numbers = [1, 2, 3]
const otherNumbers = [...numbers, 4, 5] // [1, 2, 3, 4, 5]
const copyNumbers = [...numbers] // [1, 2, 3]
const obj = {a:1, b:2}
const otherObj = {c:3, ...obj} // {a:1, b:2, c:3}
const copyObj = {...obj} // {a:1, b:2}
const name = 'manager'
if (name === 'admin') {
console.log('관리자님 환영합니다.')
} else if (name === 'manager'){
console.log('매니저님 환영합니다.')
} else {
console.log(`${name}님 환영합니다.`)
}
while (조건문) {
// do something
}
let i = 0
while (i<6) {
console.log(i)
i += 1
}
// 0, 1, 2, 3, 4, 5
for ([초기문]; [조건문]; [증감문]) {
// do something
}
for (let i = 0; i < 6; i++){
console.log(i)
}
// 0, 1, 2, 3, 4, 5
for (variable in object) {
statements
}
const fruits = {a:'apple', b:'banana'}
for (const key in fruits){
console.log(key) // a, b
console.log(fruits[key]) // apple, banana
}
for (variable of object){
statements
}
const numbers = [0, 1, 2, 3]
for (const number of numbers){
console.log(number) // 0, 1, 2, 3
}
속성 이름을 통해 반복속성 값을 통해 반복const arr = [3, 5, 7]
for (const i in arr){
console.log(i) // 0 1 2
}
for (const i of arr) {
console.log(i) // 3 5 7
}

for (let i = 0; i < arr.length; i++){…} 의 경우에는 최초 정의한 i를 재할당하면서 사용하기 때문에 const를 사용하면 에러 발생Array.forEach(function (params) {
// 배열이 가진 각 요소를 순회하면서 함수를 실행
// 아래에 실행할 코드 작성
})
const numbers = [1, 2, 3]
numbers.forEach(function (element) {
console.log(element)
})
// 1
// 2
// 3
