카테고리 없음

17.JavaScript Koans (작성중)

에밀오구 2023. 3. 6. 09:03

🚩부트캠프를 통해 얻고 싶은 나의 목표.

- 하루 평균 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는 변수의 값을 찾을 때 확인하는 곳입니다.   호이스팅은 뭘까요?  안에 있는 변수들을 범위의 최 상단으로 끌어올리는 것을 말합니다. 

더보기

(답변대기중)전역 변수로 선언할 경우 의도치 않게 다른 목적을 가진 함수가 변수를 오염시킬 수 있습니다.  따라서 변수의 스코프는 좁을수록 좋습니다. 

v8엔진

'함수 선언식(declaration)과 함수 표현식(expression)의 차이
함수선언식은 호이스팅이 되지만 함수 표현식은 안됨.
 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');
to.equal 과 to.deep.equal 의 차이

https://stackoverflow.com/questions/63249848/in-chai-assertion-library-what-is-the-use-of-assert-equal-when-we-already-ha/63249954#63249954

 

 

/ rest 파라미터 

 

더 나아가기  

let const var 정리 

mocha, chai framework에는 다양한 matcher가 있지만, 이번 과제에서는 그 일부가 사용됩니다.
  궁금하시면 아래 링크를 통해 확인하시기 바랍니다. (어떤 것들이 있는지만 확인하는 수준이면 충분합니다.)
 function factories
      namespacing private variables/functions