2022.05.16
1. 타입 확인
- "비교연산자 '=='는 두 값의 일치 여부를 느슨하게 검사(loose equality)한다. 사용을 권장하지 않음.
- 예시)
expect(0 == false).to.be.true;
expect('' == false).to.be.true;
expect([] == false).to.be.true;
expect(![] == false).to.be.true;
expect([] == ![]).to.be.true;
expect([] == '').to.be.true;
expect([] == 0).to.be.true;
expect([''] == '').to.be.true;
expect([''] == 0).to.be.true;
expect([0] == 0).to.be.true;
- "비교연산자 '==='는 두 값의 일치 여부를 엄격하게 검사(strict equality)한다.
- 타입 변환
- 예시)
1 + ’1’ === ‘11’
123 - ’1’ === 122
1 + true === 2
‘1’+ true === ‘1true’
2. 할당 연산자 Const
- 'const'로 선언된 변수에는 재할당(reassignment)이 금지
- 'const'로 선언된 배열의 경우 새로운 요소를 추가하거나 삭제 가능
- 'const'로 선언된 객체의 경우, 속성을 추가하거나 삭제 가능.
- var : 사용 권장하지 않음. 호이스팅이 발생.
3. Scope
- Scope란 변수의 유효 범위를 일컫는다.
- 변수의 값(변수에 담긴 값)을 찾을 때 확인하는 곳을 말한다.
- 접근 범위는 블록이나 함수에 의해 나뉜다.
- 3가지 규칙
- 규칙 1 : 안쪽 스코프에서 바깐쪽 스코프로는 접근이 가능하지만 반대는 불가능하다.
- 규칙 2 : 스코프는 중첩이 가능하다 (전역 스코프(Global Scope) 및 지역 스코프(Local Scope))
- 규칙 3 : 지역 변수는 전역 변수보다 더 높은 우선순위를 지닌다.
- 참고) 쉐도잉이란? 동일한 변수 이름으로 인해 바깥쪽 변수가 안쪽 변수에 의해 가려지는 현상
- 클로저(closure)
클로저는 함수와 함수가 선언된 어휘적 환경의 조합을 말한다. 이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성된다. (출처 : MDN)
- 특징 : 자신이 선언될 때의 맥락을 기억하는 함수.
- 규칙 :
- 규칙 1 : 함수를 리턴하는 함수.
- 규칙 2 : 내부 함수믄 외부 함수에 선언된 변수에 접근이 가능하다.
4. 화살표 함수
- 함수 선언문 : function 키워드를 사용하여 함수를 선언. 호이스팅 발생(함수를 정의하기 전에 호출해도 함수가 발생).
function add (x, y) {
return x + y;
}
- 함수 표현식 : 함수를 변수에 할당한 상태. 호이스팅이 발생하지 않음. 권장하는 함수 형식(호이스팅이 일어나는 상황을 만들지 않는 것이 좋음)
const add = function (x, y) {
return x + y
}
- 화살표 함수 : function 키워드를 생략하고 화살표 => 를 붙인다.
const add = (x, y) => {
return x + y
}
- 화살표 함수의 특징 :
- 리턴을 생략할 수 있다.
- const subtract = (x, y) => x - y
- 필요에 따라 소괄호를 붙일 수도 있다.
- const multiply = (x, y) => (x * y)
- 파라미터가 하나일 경우 소괄호 생략이 가능하다.
- const divideBy10 = x => x / 10
- 리턴을 생략할 수 있다.
- 활용 예)
const htmlMaker = tag => textContent => <${tag}>${textContent}</${tag}>
5. 원시 자료형 vs 참조 자료형
- 이전 글 참조.
- 원시 자료형 또는 원시 자료형의 데이터를 함수의 전달인자로 전달할 경우, 값 자체의 복사가 일어난다.
- 함수의 전달인자도 변수에 자료(data)를 할당하는 것.
- 함수를 호출하면서 넘긴 전달인자는 호출된 함수의 지역변수로 (매 호출 시마다) 새롭게 선언되는 것.
- 예시)
const nums1 = [1, 2, 3];
const nums2 = [1, 2, 3];
nums1 === nums2 // false : 값의 비교가 아닌 참조(주소값)을 비교하는 것이기 때문.
6. 배열(Array)
- 메소드 arr.slice 예시)
const arr = ['peanut', 'butter', 'and', 'jelly'];
expect(arr.slice(1)).to.deep.equal(['butter', 'and', 'jelly']);
expect(arr.slice(0, 1)).to.deep.equal(['peanut']);
expect(arr.slice(0, 2)).to.deep.equal(['peanut', 'butter']);
expect(arr.slice(2, 2)).to.deep.equal([]);
expect(arr.slice(2, 20)).to.deep.equal(['and', 'jelly']);
expect(arr.slice(3, 0)).to.deep.equal([]);
expect(arr.slice(3, 100)).to.deep.equal(['jelly']);
expect(arr.slice(5, 1)).to.deep.equal([]);
- arr.slice(), concat() 메소드는 원본을 변경하지 않음.
7. 객체(Object)
- 참고- 메소드)
- 메소드(method) : '어떤 객체의 속성으로 정의된 함수’
- 전역 변수에 선언한 함수도 웹페이지에서 window 객체의 속성으로 정의된 함수
- window. 접두사 없이도 참조가 가능하기 때문에 생략하고 쓰는 것 뿐. 이렇듯, method는 항상 '어떤 객체'의 method.
- 따라서 호출될 때마다 어떠한 객체의 method일 텐데, 그 '어떠한 객체'를 묻는 것이 this.
- 화살표 함수는 다름. 자신의 this가 없다. 화살표 함수에서의 this는 자신을 감싼 정적 범위(lexical context)이다.
- Object를 함수의 전달인자로 전달할 경우, reference가 전달된다.
- 참고 - Object.assign() 메소드
- 얕은 복사(shallow copy) : 셀 수 있는 것의 값을 복사.
- 깊은 복사(deep copy) : 참조(주소값)을 복사. 예) 객체 내의 객체는 깊은 복사가 됨.
- 객체는 배열과 달리 length 메소드가 존재하지 않음. 객체의 키의 개수를 구하려면, Object.keys(객체명).length 로 확인해야 함.
8. 전개 문법(Spread syntax)
- spread : 배열을 풀어서 인자로 전달하거나 배열을 풀어서 각각의 요소로 넣을 때 사용.
- 예 )
const spread = [1, 2, 3];
const arr = [0, ...spread, 4];
console.log(arr) // [0, 1, 2, 3, 4]
- 빈 배열에 전개 문법을 사용할 경우, 아무것도 전달되지 않는다.
- 여러 개의 배열을 이어붙일 수 있다.
- 여러 개의 객체를 병합할 수 있다.
9. 나머지 매개변수(Rest parameter)
- 함수의 전달인자를 배열로 다룰 수 있게 한다. 남아있는 모든 인자를 하나의 배열에 담는다. : ...args
- Rest Parameter는 전달인자의 수가 정해져 있지 않은 경우에도 유용하게 사용 가능.
- Rest Parameter는 전달인자의 일부에만 적용할 수도 있다.
10. 구조 분해 할당(Destructing Assignment)
- spread 문법을 이용하여 값을 해체한 후, 개별 값을 변수에 새로 할당하는 과정.
- 예)
const array = ['code', 'states', 'im', 'course']
const [first, second] = array
expect(second).to.eql('states')
expect(first).to.eql('code')
- rest/spread 문법을 배열 분해에 적용할 수 있다.
추가 학습 필요 사항
1. TDD (Test Driven Development) : 테스트 주도 개발
참고 사이트 : https://cho-coding.tistory.com/231
[JAVA SCRIPT] TDD - 테스트 주도 개발
TDD (Test Driven Development) : 테스트 주도 개발 - 기술이 아니라 습관 - 모든 개발 과정을 테스트 중심으로 진행해나가는 습관 순서 1. 테스트 작성 - 만들려는 대상이 무엇인지 선언하고, 그 대상이 테
cho-coding.tistory.com
2. 호이스팅과 TDZ
호이스팅과 TDZ는 무엇이고 어떤 연관이 있을까요?
호이스팅 ? > 함수 안에 있는 선언들을 모두 끌어 올려서 해당 함수 유효 스코프의 최상단에 선언 하는 것을 말합니다. 호이스팅의 대상 var 변수 선언과 함수 선언문에서만 호이스팅이 일어납니
velog.io
'코딩' 카테고리의 다른 글
[Java Script / DOM] 유효성 검사 및 이벤트 (0) | 2022.05.18 |
---|---|
[Java Script / Browser] DOM (0) | 2022.05.17 |
[Java Script] 선언 방식 let, const, var의 비교 (0) | 2022.05.13 |
[Java Script] 데이터 유형과 특징 (0) | 2022.05.13 |
[Java Script] 조건문, 문자열 (0) | 2022.04.27 |