Types
1+'1'
123-'1'
1+true
'1' + true
const
- 'const'로 선언된 변수에는 재할당(reassignment)이 금지
- 'const'로 선언된 배열의 경우 메서드를 사용하여 새로운 요소를 추가하거나 삭제할 수 있다.
const arr = [];
const toBePushed = 42;
arr.push(toBePushed);
expect(arr[0]).to.equal(42);
- 'const'로 선언된 객체의 경우 메서드를 사용없이 새로운 요소를 추가하거나 삭제할 수 있다.
const obj = { x: 1 };
delete obj.x;
expect(obj.x).to.equal(undefined);
obj.occupation = "SW Engineer";
expect(obj["occupation"]).to.equal("SW Engineer");
scope
- 호이스팅 :함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 선언하는 것
- var 변수 선언과 함수선언문에서만 호이스팅이 일어난다
- let/const 변수 선언과 함수표현식에서는 호이스팅이 발생하지 않는다.
- 클로저 :함수와 함수가 선언된 어휘적(lexical) 환경의 조합
내부(inner) 함수가 외부(outer) 함수의 지역 변수에 접근할 수 있다
arrow function
- 함수 표현식과 함수선언식의 차이점: 함수 선언식은 호이스팅에 영향을 받지만, 함수 표현식은 호이스팅에 영향을 받지 않는다.
함수 선언식은 코드를 구현한 위치와 관계없이 자바스크립트의 특징인 호이스팅에 따라 브라우저가 자바스크립트를 해석할 때 맨 위로 끌어 올려진다.
Types (2)
- 원시자료형은 값 자체에 대한 변경이 불가능(immutable)
- 원시 자료형을 변수에 할당할 경우, 값 자체의 복사가 일어난다.
- 원시 자료형 또는 원시 자료형의 데이터를 함수의 전달인자로 전달할 경우, 값 자체의 복사가 일어난다.
- 자바스크립트에서 원시 자료형이 아닌 모든 것은 참조 자료형이다. 배열([])과 객체({}), 함수(function(){})가 대표적이다.
- 참조 자료형의 데이터는 동적(dynamic)으로 변한다
- 참조 자료형을 변수에 할당할 경우, 데이터의 주소가 저장된다.
array
object
- object는 length가 없다.(undefined)
- in 연산자
in 연산자는 명시된 속성이 명시된 객체에 존재하면 true를 반환
속성 in 객체명
- 함수 this
method를 호출하는 시점에 결정
const test = {
prop: 42,
func: function() {
return this.prop;
},
};
console.log(test.func());
- Object.assign
출처 객체들의 모든 열거 가능한 자체 속성을 복사해 대상 객체에 붙여넣는다. 그 후 대상 객체를 반환.
목표 객체의 속성 중 출처 객체와 동일한 키를 갖는 속성의 경우, 그 속성 값은 출처 객체의 속성 값으로 덮어쓴다. 출처 객체들의 속성 중에서도 키가 겹칠 경우 뒤쪽 객체의 속성 값이 앞쪽 객체의 속성 값보다 우선으로 한다
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);
console.log(returnedTarget === target);
Spread syntax( 전개문법)
- 전개 구문을 사용하면 배열이나 문자열과 같이 반복 가능한 문자를 0개 이상의 인수 (함수로 호출할 경우) 또는 요소 (배열 리터럴의 경우)로 확장하여, 0개 이상의 키-값의 쌍으로 객체로 확장시킬 수 있다.
function sum(x, y, z) {
return x + y + z;
}
const numbers = [1, 2, 3];
console.log(sum(...numbers));
function sum(...theArgs) {
return theArgs.reduce((previous, current) => {
return previous + current;
});
}
sum(1,2,3)
sum(1,2,3,4)
let parts = ['shoulders', 'knees'];
let lyrics = ['head', ...parts, 'and', 'toes'];
let arr = [1, 2, 3];
let arr2 = [...arr];
arr2.push(4);
let obj1 = { foo: 'bar', x: 42 };
let obj2 = { foo: 'baz', y: 13 };
let clonedObj = { ...obj1 };
let mergedObj = { ...obj1, ...obj2 };
function myFun(a, b, ...manyMoreArgs) {
console.log("a", a);
console.log("b", b);
console.log("manyMoreArgs", manyMoreArgs);
}
myFun("one", "two", "three", "four", "five", "six");
구조 분해 할당(Destructing Assignment)
- 배열을 분해
- rest/spread 문법을 배열 분해에 적용할 수 있다.
- 객체를 분해
- rest/spread 문법을 객체 분해에 적용할 수 있다.