본문 바로가기
  • 살짝 구운 김 유나
Web/JavaScript

JavaScript 기초

by yunae 2022. 10. 19.

변수와 식별자

  • 식별자는 반드시 문자, $ 또는 _로 시작
  • 대소문자를 구분하며, 클래스명 외에는 모두 소문자로 시작
  • 예약어 사용 불가능

 

식별자의 정의

 

1) 카멜 케이스 : 변수, 객체, 함수에 사용

// 변수
let dog
let variableName

// 객체
const userInfo = { name:'Yuna', age:23 }

// 함수
function solve(){}

2) 파스칼 케이스 : 클래스, 생성자에 사용

// 클래스
class User {
  constructor(options) {
    this.name = options.name
  }
}


// 생성자 함수
function User(options) {
  this.name = options.name
}

3) 스네이크 케이스 : 상수에 사용 (개발자의 의도와 상관없이 변경될 가능성이 없는 값)

// 값이 바뀌지 않을 상수
const API_KEY = 'my-key'
const PI = Math.PI

// 재할당이 일어나지 않는 변수
const NUMBERS = [1, 2, 3]

 

 

 

변수 선언 키워드

 

1. let : 블록 스코프 지역 변수를 선언 (동시에 값을 초기화)

- 재할당 가능 & 재선언 불가능

 

2. const : 블록 스코프 읽기 전용 상수를 선언 (동시에 값을 초기화)

- 재할당 불가능 & 재선언 불가능

 

3. var : 변수를 선언 (동시에 값을 초기화)

- 재할당 가능 & 재선언 가능

 

-> 변수 선언시 키워드중 하나를 사용하지 않으면 자동으로 var로 선언됨!!

 

  재선언 재할당 스코프
let X O 블록스코프
const X X 블록스코프
var O O 함수스코프

 

[참고]

hoisting

: 변수를 선언 이전에 참조할 수 있는 현상

 

var로 선언된 변수는 선언 이전에 참조할 수 있으며 이러한 현상을 호이스팅이라 함

console.log(name)

var name = '유나'

-> 코드의 논리적인 흐름을 깨뜨리는 행위! 즉, var는 쓰지 않아,,

 

 

 

 

 

데이터 타입

- 크게 원시 타입참조 타입으로 분류

 

 

1. Number

: 정수 또는 실수형 숫자를 표현하는 자료형

const a = 11
const b = -2
const c = 3.14   // 실수형 숫자 표현
const d = 2.94e7  // 2.94 * 10^7
const e = Infinity
const f = -Infinity
const g = NaN  // Not a Number

 

"NaN"

: 숫자가 아님을 나타냄

- 주어진 값의 유형이 Number이고 NaN이면 True, 아니면 False를 반환

 

NaN을 반환하는 경우

1. 숫자로서 읽을 수 없음

2, 결과가 허수인 수학 계산식

3. 피연산자가 NaN

4. 정의할 수 없는 계산식

5. 문자열을 포함하면서 덧셈이 아닌 계산식

 

 

2. String

: 문자열을 표현하는 자료형

- 큰 따옴표, 작은 따옴표 모두 가능

- 덧셈을 통해 문자열을 붙일 수 있음

 

* Template Literal을 사용하면 줄 바꿈이 되며, 문자열 사이에 변수도 삽입 가능

== "python의 f-string"

- Backtick을 이용!! 

const age = 26

const tell = `영희는 ${표현식}세 입니다.`

 

 

3. Empty Value

: 값이 존재하지 않음을 표현하는 값으로 null 과 undefined 가 존재

 

1) null  : 값이 없음을 의도적으로 표현할 때 사용

let lastName = null
console.log(lastName)  // 의도적으로 값이 없음을 표현

2) undefined :  값이 정의되어 있지 않음을 표현하는 값

let firstName           // 선언만 하고 할당하지 않음
console.log(firstName)  // undefined

 

 

 

4. Boolean

: 참과 거짓을 표현하는 값

- 조건문 또는 반복문에서 boolean이 아닌 데이터 타입은 자동 형변환!

 

ToBoolean Conversions

데이터 타입 False True
undefined 항상 거짓 X
null 항상 거짓 X
Number 0, -0, NaN 나머지 모든 경우
String 빈 문자열 나머지 모든 경우
Object X 항상 참

 

 

 

 

연산자

1. 할당 연산자

: 오른쪽에 있는 피연산자의 평가 결과를 왼쪽 피연산자에 할당하는 연산자

 

* Increment 및 Decrement 연산자

: += 또는 -= 와 같이 분명한 표현으로 적을 것을 권장

 

 

2. 비교 연산자

: 피연산자들을 비교하고 결과값을 boolean으로 변환하는 연산자

- 알파벳 순서상 후순위가 더 크다

- 소문자가 대문자보다 더 크다

 

 

3. 동등 연산자 (==)

: 두 피연산자가 같은 값으로 평가되는지 비교 후  boolean 값을 반환

  • 비교할 때 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교
  • 두 피연산자가 모두 객체일 경우 메모리의 값은 객체를 바라보는지 판별
const a = 1
const b = '1'

console.log(a == b) // True
console.log(a == True) // True

// 자동 형변환 예시
console.log(5 * null)    // 0
console.log('5' - 1 )    // 4
console.log('5' + 1 )    // '51'
console.log('five' * 2 ) // NaN

 

4. 일치 연산자 (===)

: 두 피연산자의 값과 타입이 모두 같은 경우 True 반환

  • 같은 객체를 가리키거나, 같은 타입이면서 같은 값인지를 비교
  • 엄격한 비교가 이뤄지며 암묵적 타입 변환이 발생하지 않음
const a = 1
const b = '1'

console.log(a === b)   // False
console.log(a === Number(b))  // True

 

5. 논리 연산자

: and 연산은 '&&' 연산자, or 연산은 '||', not 연산은 '!' 연산자

 

* 단축 평가 지원

ex) False && True => False

ex) True || False => True

 

 

 

6. 삼항 연산자

: 3개의 피연산자를 사용하여 조건에 따라 값을 반환하는 연산자

- 가장 앞의 조건식이 참이면 : 앞의 값이 반환, 그 반대일 경우 : 뒤의 값이 반환

- 삼항 연산자의 결과 값은 변수에 할당 가능

true ? 1 : 2   // 1
false ? 1 : 2  // 2

const result = Math.PI > 4 ? 'Y' : 'N'
cosole.log(result)   // N

 

 

 

 

조건문

1. if statement

: 조건 표현식의 결과값을 boolean 타입으로 변환 후 참/거짓을 판단

const name = '조승우'

if (name == 'admin') {
  console.log('관리자님 안녕하세요.')
} else if (name === '조승우') {
  console.log('조승우님 안녕하세요.')
} else {
  console.log(`$[name}님 안녕하세요.')
}

 

 

2. switch statement

: 표현식의 결과값을 이용한 조건문

- 표현식의 결과값과 case문의 오른쪽 값을 비교

-break문이 없는 경우 break문을 만나거나 default문을 실행할 때 까지 다음 조건문 실행

const name = '조승우'

switch(name) {
  case '조승우' : {
  	console.log('조승우님 환영합니다')
    break
  }
  case '고동만' : {
  	console.log('고동만님 환영합니다')
    break
  }
  default: {
  	console.log(`${name}님 환영합니다`)
  }
}

- > 조건이 많은 경우 switch문을 통해 가독성 향상 기대

- > 일반적으로 중첩 else-if문은 유지보수가 어려운 문제도 있음

 

 

 

 

 

반복문

 

1. while

: 조건이 참이기만 하면 문장을 계속해서 수행

while (조건문) {
  // do something
}

 

2. for

: 특정한 조건이 거짓으로 판별될 때까지 반복

for ([초기문]; [조건문]; [증감문]) {
  // do something
}

 

3. for...in

: 객체의 속성을 순회할 때 사용

- 배열도 순회 가능하지만 인덱스 순으로 순회한다는 보장이 없으므로 권장하지 않음

for (variable in object) {
  statements
}

 

4. for...of

: 반복 가능한 객체를 순회할 때 사용

- 반복 가능한 객체의 종류 : Array, Set, String 등

for (variable in object) {
  statements
}
const numbers = [0, 1, 2, 3]

for (const num of numbers) {
  console.log(num)   // 0, 1, 2, 3
}

 

* for...in과 for...of 의 차이점

=> for..in은 속성 이름을 통해 반복 for...of는 속성 값을 통해 반복!!

=> for..in은 객체 순회에 적합 반복 for...of는 iterable 순회 적합!!

 

 

[참고]

일반적인 for문의 경우에는 최초 정의한 i를 재할당 하면서 사용하기 때문에 const를 사용하면 에러 발생

-> 다만 for..in, for...of 의 경우에는 재할당이 아니라, 매 반복 시 해당 변수를 새로 정의하여 사용하므로 에러가 발생하지 않음

 

 

 

함수

 

함수의 정의

- JavaScript 에서 함수를 정의하는 방법은 주로 두가지로 구분됨

1) 함수 선언식    2) 함수 표현식

 

 

함수 선언식

function 함수명() {
  // do something
}

function add(num1, num2) {
  return num1 + num2
}

console.log(add(3, 7))  // 10

 

 

함수 표현식

: 표현식 내에서 함수를 정의하는 방식

 

함수 표현식은 함수의 이름을 생략한 익명 함수로 정의 가능

변수키워드 함수명 = function () {
  // do something
}

const sub = function (num1, num2) {
  return num1 - num2
} 

console.log(sub(10, 3))

 

* 기본인자

: 인자 작성 시 '=' 문자 뒤 기본 인자 선언 가능

const greeting  = function (name='Anonymous') {
  return `Hi ${name}`
}

console.log(greeting())

 

* 매개변수와 인자의 개수 불일치 허용

1) 매개변수보다 인자의 개수가 많을 경우

const noArgs = function () {
  return 0
}

noArgs(1, 2)   // 0

const twoArgs = function (num1, num2) {
  return [num1, num2]
}

noArgs(1, 2, 3, 4)   // [1, 2]

2) 매개변수보다 인자의 개수가 적을 경우

const threeArgs = function (num1, num2, num3) {
  return [num1, num2, num3]
}

threeArgs()        // [undefined, undefined, undefined]
threeArgs(1)       // [1, undefined, undefined]
threeArgs(1, 2)    // [1, 2, undefined]

 

 

Spread syntax (전개 구문)

: 배열이나 문자열과 같이 반복 가능한 객체를 배열의 경우는 요소, 함수의 경우는 인자로 확장 가능

 

1. 배열과의 사용

let part = ['apple', 'orange']
let friuts = ['grape', ...part, 'peach']
// ['grape', 'apple', 'orange', 'peach']

2. 함수와의 사용

- The rest parameter syntax를 사용하여 정해지지 않은 수의 매개변수를 배열로 받을 수 있음

const restArr = function (num1, num2, ...restNums) {
  return [num1, num2, restNums]
}

restNums(1, 2, 3, 4, 5)    // [1, 2, [3, 4, 5]]
restNums(1, 2)             // [1, 2, []]

 

 

 

 

선언식과 표현식

 

함수의 타입

- 선언식 함수와 표현식 함수 타입은 모두 function으로 동일

 

 

호이스팅

* 함수 선언식으로 정의한 함수는 호이스팅 발생

-> 즉, 함수 호출 이후에 선언해도 동작

 

* 반면 함수 표현식으로 선언한 함수는 함수 정의 전에 호출 시 에러 발생

-> 함수 표현식으로 정의된 함수는 변수로 평가되어 변수의 scope 규칙을 따름

= Airbnb Style Guide 권장 방식!!

 

 

Arrow Function (화살표 함수)

"함수를 비교적 간결하게 정의"

 

- function 키워드와 중괄호를 이용한 구문을 짧게 사용하기 위해 탄생

  • function 키워드 생략 가능
  • 함수의 매개변수가 하나뿐이라면 '( )' 도 생략 가능
  • 함수의 내용이 한 줄이라면 '{ }' 와 'return'도 생략 가능

- 화살표 함수는 항상 익명 함수 : == 함수 표현식에서만 사용 가능

const greeting1  = function (name='Anonymous') {
  return `Hi ${name}`
}

// 1. function 키워드 삭제
const greeting2 = (name) => { `Hi ${name}` }
// 2. 인자가 1개일 경우에는 소괄호 삭제
const greeting3 = name => { `Hi ${name}` }
// 3. 함수 바디가 한 줄일 경우에는 {}, return 삭제
const greeting4 = name => `Hi ${name}`

-> 명확성과 일관성을 위해 소괄호는 포함하는 것을 권장한다.

 

 

 

 

즉시 실행 함수

: 선언과 동시에 실행되는 함수

- 함수의 선언 끝에 '( )' 를 추가하여 선언되자 마자 실행하는 형태

- '( )' 에 값을 넣어 인자로 넘겨줄 수 있음

function (num) {return num ** 3}
  
(num) => { return num ** 3 }

// 즉시 실행 함수
((num) =>  num ** 3)(2)

 

 

 

 

오늘부터 자바스크립트! 

- 과제 먼저 끝내기!

- 복습하고 블로그 작성하기,,(밀리지않기)

- 테스트 대비 알고리즘 1문제씩 풀기

- 하루 중 한시간은 홈트 또는 빨리 걷기

- 조만간 꼭 붕어빵 사먹으러 가기

'Web > JavaScript' 카테고리의 다른 글

JavaScript - 동기와 비동기  (0) 2022.10.26
JavaScript 심화 - Event  (0) 2022.10.24
JavaScript 심화 - DOM  (0) 2022.10.24
JavaScript 기초- Object  (0) 2022.10.19
JavaScript 기초 - Array  (0) 2022.10.19

댓글