실행중 타입변환이 일어나 명확한 규칙도 없는아래와 같은 결과가 나온다
'1' == 1 // true
[] == ![] // true
[] == '' // true
[0] == 0 // true
0 == false // true
이는 프로그램 작동의 예측을 여럽게 하여
엄격한 동치 연산(strict equality)
'==='을 사용하는게 좋다
123 - '1' // 122
1 + false // 1
1+ true // 2
'1' + true // '1true'
비교는 같은 타입끼리
원시 자료형은 값의 변경이 불가능 한데
함수의 인자로 전달할 경우엔 값 자체의 복사가 일어난다
let num = 2020; function add(arg) { arg = arg + 10; } add(num); console.log(num) // 2020 // 함수호출로 num이 바뀐건가 싶겠지만 함수로 값자체를 복사해 전달했기때문에 num 원본은 안바뀝니다 //정확히 말하면 함수를 호출할때 전달한 인자가 호출된 함수의 지역변수로 (매 호출 시마다) 새롭게 선언된것 입니다
참조 자료형의 주소가 담긴 변수를 다른변수에 할당시
그 주소는 같다
const arr = [a, b, c]; // [a, b, c]는 heap이라는 특별한 공간에 저장되고, 그 주소가 변수 arr에 저장된다. const arr 2 = arr; // arr를 arr2에 할당시 console.log(arr === arr2) // true //변수에 주소를 받아 [] === [] 같은경우엔 false라 //위와같은 경우에도 false 라고 생각하기 쉽지만 //받아온 주소를 다른변수에 할당시킨거라 // 그 주소는 같고 그결과 둘은 같다
let array = [1,2,3]; console.log(typeof array) // 'object'
얕은복사
원본과의 참조주소가 완전히 끊어지지않는 복사를 말한다
[ 1, 2, 3, 4, 5, [ 6, 7, 8] ]
이경우 배열의 속의 배열인 678은 참조주소가 완전히 안끊어져 있어 저 값을 건드리면 원본 배열도 영향이 간다
깊은복사
참조주소를 완전히 끊은 복사 (자바스크립트 상 완벽한 깊은복사는 불가능하다고 한다 ->더알아볼것)
재귀함수, JSON.parse(JSON.stringfy()) 을 이용
"유사 배열인 arguments 객체에 요소를 push 할 수 없다 "
arguments 객체는 배열이 아니기 때문에, 배열 메소드인 push를 사용할 수 없습니다. 이 점이 오랫동안 자바스크립트의 불편한 점으로 남아있어, ES6에서는 rest parameter를 사용할 수 있게 되었습니다.
실행중에 this가 포함된 라인(scope)을 가능하게 하신 분
this 가 어려운 이유
과제를 진행하면서 전체적으로 복습을 해볼수있는 시간이었는데
이제는 확실히 안다고 생각했던 개념들의 몰랐던 부분들을 알수있어 좋았다
특히 1+true 가 2 일줄은 전혀 몰랐고..
객체나 배열같은경우에 변수에 기존 객체,배열 이있는 변수를 할당시킬경우 주소가 다를줄알았는데 같은 주소라는걸 기억해두자
클로저는 스프린트 진행하면서 복습이 무조건 필요하다 생각해왔고 이해도 잘안되었는데 외부함수에 접근가능한 내부함수 라고 생각해두고 이해될때까지 koans 방탄소년단 문제를 다시 풀어보면 될것이다.
rest parameter의 복습은 무조건 필요