문제를 풀고 다른 사람이 작성한 답을 보다가 헷갈리는 부분이 있어 포스팅합니다.
TIP )
[...Array(5).keys()]; // range(5)
let tube1 = Array.apply(null, Array(t));
let tube2 = Array(t).fill(undefined);
let tube3 = Array(t)
console.log(tube1) // [undefined x t]
console.log(tube3 // [undefined x t]
console.log(tube3) // [empty x t]
tube1과 tube2는 동일하게 undefined로 채워집니다.
https://school.programmers.co.kr/learn/courses/30/lessons/17687
해당 문제에서 꼭 위와 같이 쓴 이유는 empty로 하면 map으로 순회를 하지 않기 때문에
굳이 undefined로 채우는 문법을 사용한 것으로 보입니다.
그래서 tube1과 tube2는 같겠지 해서 아래와 같이 비교해보았는데
tube1 === tube2 // false
무언가 다른게 있구나 싶어 constructor를 전부 뒤져보았는데 다른 점이 보이지 않았습니다.
그래서 아 설마.. 하고
[1,2,3] === [1,2,3] // false
이 역시 false가 나왔습니다.
여기서 참조를 동일하게 하니
b = a
a === b //true
true가 도출되었습니다.
이는 원시 타입이 아닌 참조 타입일 시, 참조가 동일해야 동등 연산자가 들어 먹는다고 알 수 있었습니다.
(추후 좀 더 상세히 수정 요망.)
apply => apply() 메서드는 주어진 this 값과 배열 (또는 유사 배열 객체) 로 제공되는 arguments 로 함수를 호출합니다.
(출처 MDN)
그렇기에 위의
Array.apply(null, Array(t));
의 경우 Array선언 안에 Array(t) arguments들을 넣어주고 apply특성상 빈 값이 안들어가고 null 또는 undefined가 들어가므로 undefined로 채워 진 것이라고 보여집니다.
+ 함수 선언식 함수 표현식
함수 선언식으로 작성한 함수는, 함수 전체가 호이스팅 된다고 하였는데, 전역적으로 선언하게 되면, 중복적으로 동명의 함수를 쓰게 된다면, 원치 않는 결과를 초래할 수 있습니다.
함수 표현식으로 작성하게되면 이를 방지할 수 있습니다. => 함수 표현식 권장
'언어 > Javascript' 카테고리의 다른 글
[클린코드 자바스크립트] 함수 (0) | 2022.09.01 |
---|---|
async 콘솔에 찍어본 기록 (0) | 2022.08.19 |
PS속 스프레드 문법과 Rest문법 분석 과정 (0) | 2022.08.18 |
집합의 교집합 차집합 대칭차집합 (0) | 2022.08.14 |
Array.prototype.join() (0) | 2022.08.12 |