17.JavaScript Koans (작성중)
🚩부트캠프를 통해 얻고 싶은 나의 목표.
- 하루 평균 3시간 자기주도학습능력(몰입의 경험) -> 블로그 작성/ 플래너 작성
=> TODAY SCORE:
-앤트리 개발자 수준의 프론트 개발 실력 쌓기 -> 부트캠프 과제 기한 밀리지 않기!!!(매우 중요)
=> TODAY SCORE:
- 주니어 개발자 수준의 협업능력과 커뮤니케이션 능력 -> 스터디 클럽 운영
=> TODAY SCORE:
- 자바스크립트 딥다이브 책 정독 1회 -> 적극적인 스터디 활동
=> TODAY SCORE:
🙇♀️오늘을 돌아보며
keep 유지해야할 것:
problem 고쳐야할 것 :
Try 시도해야할 것:
🏃♀️성장한 부분 -📚문제 풀이
1. Js koans 정리
1-1.느슨한 동치 연산자.
느슨한 동치 연산자 "=="는 실행중 타입변환이 일어납니다. 일반적인 프로그래밍 언어의 관습과 거리가 있는 연산자입니다. 따라서 엄격한 동치 연산 사용을 권장합니다.
//느슨한 동치 연산자
//==실행중 타입 변환이 일어납니다
//0은 false 처리 되어 true가 됩니다.
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;
Q. [ ] ==![ ]은 왜 true로 나오는 걸까요?
자바스크립트에서 빈문자열은 false로 취급하지만 빈 배열과 빈 객체는 true로 취급합니다. 근데 왜 [ ] 는 ture 취급하는 걸까요? JS 는 내부적으로 빈배열일 경우 숫자로 강제 변환합니다. 빈배열을 0 으로 바꿔줘서 아래와 같은 원리로 true가 나오게 됩니다.
// [] == ![] 이 TRUE 인 이유
[] == ![] //Array , boolean +Array 빈배열을 숫자 0으로 바꿔줍니다.
0 ==![] //Number , boolean +Array
0 == false // Number , boolean
0 == 0 // Number , Number
true
❗주의할 점
1. JS 추상비교 (==)에서 빈배열은 무조건 숫자로 강제 변환됩니다. [] => 0
2. 앞에 ! 가 있으면 boolean 형태로 변환합니다.
//자바스크립트의 깜찍한 부분
expect(123 - '1').to.equal(122);
expect(1 + true).to.equal(2);
expect('1' + true).to.equal('1true');
별난 특성들을 전부 외워서 모든 상황에 대응하려고 하지 말고, 올바른 코딩 습관을 기르길 바랍니다.
-코드스테이츠-
최대한 같은 타입끼리 연산.
즉 엄격한 동치 연산('===')을 사용.
조건문에 비교 연산을 명시.
03_LetConst.js
'const'로 선언된 배열,객체인 경우 재할당은 금지되지만, 새로운 요소/속성을 추가하거나 삭제할 수 있습니다. Q. "const"를 추천하는 이유는 뭘까요? (답변대기중)
04_Scope.js
//자바스크립트 포용력 뭐야 ;;
console.log(a) //undefined
a =1 //
var a //선언을 뒤에 해도 잘 동작됩니다.
console.log(a) //1
scope는 변수의 값을 찾을 때 확인하는 곳입니다. 호이스팅은 뭘까요? 안에 있는 변수들을 범위의 최 상단으로 끌어올리는 것을 말합니다.
(답변대기중)전역 변수로 선언할 경우 의도치 않게 다른 목적을 가진 함수가 변수를 오염시킬 수 있습니다. 따라서 변수의 스코프는 좁을수록 좋습니다.
let message = 'Outer';
function shadowParameter(message) {
//매개변수는 함수 몸체 내에서 변수와 동일하다
//message =Parameter
message = 'Do not use parameters like this!';
return message;
}
//
expect(shadowParameter('Parameter')).to.equal('Do not use parameters like this!');
//
expect(message).to.equal('Outer');