참고자료: 인프런 자바스크립트 초급강의
Javascript ES6+ 제대로 알아보기 - 초급 - 인프런 | 강의
ES6+ 제대로 알아보기 강좌는 Javascirpt의 ES6 및 이후의 표준 ECMAScript 명세에 대하여 이론을 바탕으로 ES5와 달라진 점 및 개념과 동작 원리를 깊이 있게 알려드립니다., Javascript ES6+는 뭐가 다를까?
www.inflearn.com
- default parameter
: 기본값 매개변수(함수의 2인자/ 파라메타)
const f = function (x, y, z) {
x = x ? x : 4
y = y || 5
if (!z) {
z = 6
}
console.log(x, y, z)
}
f(1)
f(0, null)
//결과
1 5 6
4 5 6
f(1)은
x에서 제대로된 숫자값이 적용되니 true니까 1로 출력(만약 false면 4가 출력되겠지?)
y도 없으니까 5로 출력이 되겠고,
z도 z의 값이 없으니까 6으로 출력
f(0, null)은
x의 0이 들어와서 시스템 상 false라고 인식해 4가 출력
y는 null이니까 또 false로 인식해 5 출력
z는 아예 값이 없으니까 또 false로 인식해 6출력
그렇다면, undefined일때만 false로 인식하게 할 수 없을까?
그러면 이렇게 코드를 짜보자!
const f = function (x, y, z) {
x = x !== undefined ? x : 3
y = typeof x !== "undefined" ? y : 4
console.log(x, y)
}
f(0, null)
//결과
0 true 6
undefined일때만 기본값을 할당하라
즉, 다른건 다 괜찮. 0도 괜찮고 null도 괜찮아. undefined 일때만 x라면 4로 출력하여라
그래서 x는 0 y도 undefined가 아니니까 true,
x는? undefined이지? 값이 없지? 그래서 기본값 6 출력이 되는거야!
const f = function (a = 1, b = 2, c = 3, d = 4, e = 5, f = 6) {
console.log(a, b, c, d, e, f)
}
f(7, 0, "", false, null)
//결과
7 0 '' false null 6
여기서, 마지막 6만 undefined지? 그래서 f의 6만 그대로 출력되는거야
번외)
function a (a=1, b=c+1, c=3){
let _a;
let _b=_c+1;
let _c;
console.log(_a, _b, _c);
}
//result
undefined
왜? _b를 선언할 때 _c를 선언을 안했는데 _c를 넣었으니까
참고하라구
그러면, 우리가 error를 선언해보자!
const notValid= function(){
console.error('notValid Called');
return 10;
}
const sum=function(x, y= notValid()){
console.log(x+y);
}
이런식으로! notValid function에 집중하자
밑에 sum함수는 notValid function을 적용시킬 때
번외 - let의 함수선언 순서)
let a = 10
let b = 20
function f (aa = a, b = b) {
console.log(aa, b)
}
f(1, 2)
f(undefined, 2)
f(1)
//결과
1 2
10 2
1 b is undefined
당연한 결과겠지?
f(1,2)는 이해되겠고
f(undefined, 2)라면 a의 값이 undefined이기 때문에 전역변수를 끌어와서 10을 출력하는 것
또, f(1) 값은 a의 값은 입력해 1을 넣었지만, b의 값을 정의내리지 않았기 때문에 b is undefined가 나온것 !
번외 - 유사배열객체)
또, 유사배열객체(argument)에 대해서 조금 짚고 바로 넘어가보자
유사배열객체란?
객체인데, 배열은 아니야
그냥 프로퍼티 키는 인덱스가 되고, length라는 프로퍼티가 있는 객체야.
말 그대로 유사한 배열 객체 (다시 말하지만 배열은 아니야)
그래서,
console.log(arguments.pop(1))
//result: error
array.prototype.pop.call(arguments));
//이렇게 해야 error가 나오지 않음
//또다른 방법
const arg = array.prototype.slice.call(arguments);
console.log(arg.pop()); //에러 발생 X
이처럼, arguments는 배열이 아니기 때문에 pop 프로퍼티를 쓰지 못해.
만약 쓴다면, prototype을 연결하여 쓸 수밖에 없지.
기억해!
arguments는 배열이 아니라는 것!
'자바스크립트의 정석 🟡' 카테고리의 다른 글
자바스크립트 - arrow function (0) | 2023.09.19 |
---|---|
자바스크립트 - rest parameter, spread operator (0) | 2023.09.18 |
자바스크립트 - tag function (0) | 2023.09.17 |
자바스크립트- forEach, map, reduce (0) | 2023.09.17 |
자바스크립트 - class (0) | 2023.09.17 |