1 + '1' = '11' //1. 숫자 + 문자 = 문자열로 나열
12 - '1' = 11 // 2. 숫자 - 문자 = 숫자로서 계산
1 + true = 2 //3. true는 1, false는 0으로 계산
'1' + true = '1true' //4. 문자+true는 문자열로 나열
true + false = 1
- : 문자열과 숫자를 + 로 연산하면 문자열로서 나열
- : 문자열과 숫자를 -로 연산하면 숫자로서 계산
객체가 아니면서 메서드를 가지지 않는 데이터
string, number, bigint, boolean, undefined, symbol, (null)
원시자료형은 immutable하다!
새로운 값으로 재할당은 가능!
원시자료형을 변수에 할당할 경우 값을 복붙
원시자료형을 함수의 전달인자로 전달한 경우, 값 복사
스택에 원시 자료형의 데이터가 저장된다.
원시자료형이 아닌 것은 참조자료형이다.
배열([])과 객체({}), 함수(function(){}
참조자료형은 값이 아닌 주소가 할당된다.
힙에 참조자료형의 데이터가 저장된다.
참조자료형을 변수에 할당할 경우 주소가 저장
const는 재할당되지 않는다.
const로 선언된 배열이나 객체에 새로운 요소나 속성을 변경할수있다.
호이스팅?
코드가 실행되기 전에 변수선언/함수선언이 해당 스코프의 최상단에 선언함
함수선언식은 호이스팅
함수표현식은 호이스팅이 되지 않음!
lexical scope
내부(inner) 함수가 외부(outer) 함수의 지역 변수에 접근가능함
function factories
namespacing private variables/functions
const add = (x, y) => {
return x + y;
}
const add = (x, y) => x + y //리턴생략
const add = (x, y) => (x + y) //소괄호 ok!
const add = x => x + 1 //파라미터가 하나일 경우
const add = x => { //화살표함수로 클로저 사용
return y => {
return x + y
}
}
Array.isArray로 확인
typeof로 확인시 object로 반환된다
Object.keys().length 로 크기 확인
Object.assign({}, obj) 두 요소를 합친다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/this
this는 method를 호출하는 시점에 결정된다.
화살표함수는 자신의 this가 없다.
화살표함수에서 this는 자신을 감싼 lexical content(정적범위)
'나'를 갖고있는 요소 자체를 말한다.
https://www.digitalocean.com/community/tutorials/copying-objects-in-javascript
|| shallow copy & deep copy(재귀함수이용, 각각 주소까지 복사)
https://medium.com/watcha/%EA%B9%8A%EC%9D%80-%EB%B3%B5%EC%82%AC%EC%99%80-%EC%96%95%EC%9D%80-%EB%B3%B5%EC%82%AC%EC%97%90-%EB%8C%80%ED%95%9C-%EC%8B%AC%EB%8F%84%EC%9E%88%EB%8A%94-%EC%9D%B4%EC%95%BC%EA%B8%B0-2f7d797e008a
빈 배열에 spread사용시 아무것도 전달되지 않음
배열 뿐 아니라 객체도 병합
함수의 전달인자를 배열로 다룰 수 있음
지정된 매개변수 이상의 매개변수가 들어오면 무시한다.
지정된 매개변수보다 매개변수가 덜 들어오면 undefined
arguments는 유사배열이 됨. 유사배열은 배열 메서드를 쓸 수 없다.
Array.from() 유사배열을 배열으로 만들어줌
[ ...arr1, ...arr2]; === arr1.concat(arr2);
배열을 분해
rest, spread 함께 사용
할당하기 전 왼쪽에는 rest문법 이후에 쉼표가 올 수 없다.
const [first, ...middle, last] = array //불가능함
const person = {
name: name;
}
const person = { //key와 value가 같은경우 생략가능함
name;
}
const student = { name: '박해커', major: '물리학과' }
const { name } = student //name만 입력해도 박해커가 호출됨