[20221107] 자바스크립트 기초 문법 (feat. 항해99 프리온보딩 1일차)

2022. 11. 7. 17:08·TIL

1. 불리언 연산

Falsy 값에는 빈 문자열 '', 숫자 0, 불리언 false, null, undefined, NaN가 해당된다. Falsy 값이 아닌 모든 값은 Truthy 값으로 연산되며 결국 true로 평가된다고 이해할 수 있다. 항상 Truthy 로 판단되는 자료형에는 Array와 Object가 있다. 다른 자료형을 가진 값에 강제로 불리언 연산을 적용하려면 Boolean 함수를 사용할 수 있다.

Boolean('String') 
// true
Boolean('')
// false
Boolean(undefined)
// false

2. 논리 연산자

&& (AND 연산자)

condition1 && condition2 의 형태로 표현하며, condition1~2는 모든 자료형의 값을 넣을 수 있으며, 불리언 연산이 적용된다. 연산자 양쪽에 있는 값 모두 Truthy 해야 AND 연산자의 결과물도 Truthy 한것으로 볼 수 있다.

 

조건은 여러개를 사용할 수 있으며, 이를 Chaining이라 부른다.

  • 'String' && true && [] && {} && undefined → 결과: undefined
  • 'String' && false && [] && {} && undefined → 결과: false

만약 condition1 과 condition2 의 자료형은 String 또는 null만 가진다고 가정할 경우, 두가지의 동일한 방법을 사용할 수 있다.

// 첫번째 방법
let result = null;

if (condition1 && condition2)
	result = 'Value';
    
// 두번째 방법
const result = condition1 && condition2 && 'Value';

 

|| (OR 연산자)

condition1 || condition2 의 형태로 표현하며, condition1~2는 모든 자료형의 값을 넣을 수 있으며, 불리언 연산이 적용된다. 연산자 양쪽에 있는 값 중 하나라도 Truthy 하면 OR 연산자의 결과물도 Truthy 한다.

 

AND 연산자와 마찬가지로 Chaining이 가능합니다.

  • false || '' || 0 || null || 'Value!!' || undefined → 결과: 'Value!!'
  • false || '' || 1 || null || NaN || undefined → 결과: 1

각 조건이 존재하는지 condition1부터 체크하며 값이 존재하면 해당 조건에 있는 값을 result의 값으로 사용한다고 가정할 경우, 두가지 동일한 방법으로 구현이 가능하다.

// 첫번째 방법
let name;

if (condition1)
	name = condition1;
else if (condition2)
	name = condition2;
else if (condition3)
	name = condition3;
else
	name = '강승현';
    
// 두번째 방법
const name = condition1 || condition2 || condition3 || '강승현';

 

! (NOT 연산자)

!value 의 형태처럼 표현하며, value는 모든 자료형의 값을 넣을 수 있다. NOT 연산자의 결과물은 항상 불리언 연산이 적용된 Boolean 자료형의 값이다. (true or false) 즉, !'StringValue!!' , !true , !1234 등 불리언 연산에서 Truthy로 평가되는 값의 반대 값을 반환하므로 항상 false가 반환되며, !'', !0, !NaN, !false 등 불리언 연산에서 Falsy로 평가되는 값의 반대 값을 반환하므로 항상 true가 반환된다.

 

3. 함수 구현

나이에 따라 달라지는 명령어를 실행하는 함수

function isAdult(person) {
  // 왜 이런 코드가 가능한지 모르겠다면 비교 연산자를 복습하세요! 기초 튼튼!
  return person.age >= 19;
}

function orderBeer(person) {
  if (isAdult(person)) {
    console.log('맥주 나왔습니다! ' + person.name + '님');
  } else {
    console.log('나이 더 먹고 오세요! ' + person.name + '님');
  }
}

const persons = [
  { name: "강승현", age: 19 },
  { name: "홍길동", age: 18 },
];

// for...of문이 어떻게 동작하는지 모르겠다면 반복문을 복습하세요!
for (const person of persons) {
  orderBeer(person);
}

// Print: 맥주 나왔습니다! 강승현님
// 나이 더 먹고 오세요! 홍길동님

 

화살표 함수를 사용하여 보다 간편하게 사용해보자!

const personArray = [
  { name: "John Doe", age: 20 },
  { name: "Jane Doe", age: 19 },
  { name: "Fred Doe", age: 32 },
  { name: "Chris Doe", age: 45 },
  { name: "Layla Doe", age: 37 },
];

// personArray의 나이 평균을 구해주는 Arrow Function을 작성해봅시다.
const getAgeAverage = (personArray) => {
	let sum = 0;
	for (let person of personArray) {
		sum = sum + person["age"];
	}
	const average = sum / personArray.length;

	return average;
}

console.log(getAgeAverage(personArray));

 

4. 익명함수

익명 함수는 일반 함수와 다르게 함수의 이름이 존재하지 않고 변수에 함수를 담아 사용하는 함수다. 변수에 값을 저장하는 방법처럼 변수에 함수를 저장해서 사용한다.

// 일반 함수
function foo() {
  console.log("bar");
}

// 익명 함수
let foo = function () {
  console.log("bar");
};

익명 함수는 주로 재사용 되지 않고 한번만 사용되는 함수일 경우에 자주 사용하게 되는데, 이는 일회성인 함수를 일반 함수로 구현 함으로서 불필요한 메모리를 차지하는것을 방지하여 메모리 낭비를 줄일 수 있다는 장점 때문에 주로 사용된다.  하지만 익명 함수 또한 단점이 있는데 Hoisting이 적용되지 않는다는 단점이 있다. 일반적으로 작성된 함수의 경우 함수 선언보다 호출이 위에 있더라도 호출하는 위치에 상관없이 사용될 수 있지만, 익명함수의 경우 Hoisting이 적용되지 않아 에러가 나오게 된다.

// 일반 함수로 선언부보다 위에서 함수를 호출했을 때, 정상적으로 호출된다.
hello(); // hello!

function hello() {
  console.log("hello!");
}

// 익명 함수의 경우, 에러가 뜬다.
hello(); // Uncaught ReferenceError: Cannot access 'hello' before initialization

const hello = function() {
  console.log("hello!");
}

 

5. 구조 분해 할당

구조 분해 할당 문법은 배열(Array)혹은 객체(Object)에서 각각 값 이나 프로퍼티를 분해하여 손쉽게 개별 변수에 담을 수 있도록 해 준다.

// 배열에서의 구조 분해 할당
const [a, b] = [100, 200];
console.log(a); // 100
console.log(b); // 200

//혹은 아래와 같이 표현할수있습니다.

const array = [100,200]
const [a,b] = array
console.log(a); //100
console.log(b); //200

// a 에는 array[0] , b에는 array[1] 값이 할당 되었습니다.

배열에서의 구조 분해 대상이 배열의 값이 였다면 , 객체에서는 프로포티(property) 가 대상이 된다.

// 객체에서의 구조 분해 할당
const student = {
  name: "Sparta",
  age: 18,
  onlineClass: "Node JS",
};
const { name, age, onlineClass } = student
console.log(name); // "Sparta"
console.log(age); // 18
console.log(onlineClass); // "Node JS"

cf. 참고로 자바스크립트의 기본 타입(data type)은 객체(object)다. 객체란 이름(name)과 값(value)으로 구성된 프로퍼티(property)의 정렬되지 않은 집합이다. 프로퍼티의 값으로 함수가 올 수도 있는데, 이러한 프로퍼티를 메소드(method)라고 합니다. 예를 들어 아래와 같이 고양이 객체는 다음과 같은 프로퍼티들을 갖는다.

let cat = { name: "나비", age: 1, weight: 0.1, mew: function() {return...} };

// 프로퍼티(property)
cat.name = "나비"
cat.age = 0.1
cat.weight = 300

// 메소드(method)
cat.mew()
cat.eat()
cat.sleep()
cat.play()

'TIL' 카테고리의 다른 글

[20221125] 항해99 주특기 리액트 첫날🍁(feat. 코딩애플 리액트 강의)  (0) 2022.11.25
[20221112] 자바스크립트 함수에 대한 고찰 (feat. 항해99 프리온보딩 6일차)  (0) 2022.11.12
[20221111] 자바스크립트 혼공스 함수 연습문제 (feat. 항해99 프리온보딩 5일차)  (0) 2022.11.11
[20221110] 자바스크립트 혼공스 반복문 연습문제 (항해99 프리온보딩 4일차)  (0) 2022.11.10
[20221108] 자바스크립트 if, switch 조건문 (feat. 항해99 프리온보딩 2일차)  (2) 2022.11.07
'TIL' 카테고리의 다른 글
  • [20221112] 자바스크립트 함수에 대한 고찰 (feat. 항해99 프리온보딩 6일차)
  • [20221111] 자바스크립트 혼공스 함수 연습문제 (feat. 항해99 프리온보딩 5일차)
  • [20221110] 자바스크립트 혼공스 반복문 연습문제 (항해99 프리온보딩 4일차)
  • [20221108] 자바스크립트 if, switch 조건문 (feat. 항해99 프리온보딩 2일차)
youjeong_choi
youjeong_choi
  • youjeong_choi
    youjeong
    youjeong_choi
  • 전체
    오늘
    어제
    • 분류 전체보기 (101)
      • HTML, CSS (7)
      • JavaScript (19)
        • 모던 자바스크립트 딥다이브 (4)
      • ReactJS (17)
      • TIL (15)
      • WIL (17)
      • 알고리즘 (17)
      • 네트워크 (5)
      • Vue (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리액트 라이프 사이클
    항해99 실전프로젝트
    자바스크립트
    선언적 함수
    항해99
    모던자바스크립트딥다이브
    알고리즘
    항해99리액트
    피니아
    리액트 라우트
    무한렌더링
    항해99리액트숙련주차
    리액트
    항해99주특기
    익명 함수
    파이썬
    알고리즘 문제
    혼공스
    항해99 주특기
    항해99주특기리액트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
youjeong_choi
[20221107] 자바스크립트 기초 문법 (feat. 항해99 프리온보딩 1일차)
상단으로

티스토리툴바