Javascript koans

문종후·2023년 3월 6일
0

문제풀이를통해 어느정도 개념을정리할수있게되었고 블로깅을통해 정리해보고자한다.

Type

가장먼저 type에대한 이야기를 할것인데 type에는 숫자 문자열 배열 등등 여러가지가있고 이에따라 같은 숫자가적혀잇더라도 유형에따라 더해지지않고 그대로붙여지기도하며 주의해야할 요소이다.

문제내에서는 이를비교하기위해 연산자 ==,===를사용했고 같은타입에 엄격한 동치연산자인 ===를 사용하는게 중요하다.

Const

const 로 선언된변수는 재할당이금지되며 이런이유때문에 let var에비해 안전하다.

----찾은글---
변수를 선언하는 시점에는 재할당이 필요할지 잘 모르는 경우가 많다. 그리고 객체는 의외로 재할당을 하는 경우가 드물다. 따라서 변수를 선언할 때에는 일단 const 키워드를 사용하도록 하자. 반드시 재할당이 필요하다면(반드시 재할당이 필요한지 한번 생각해 볼 일이다.) 그때 const를 let 키워드로 변경해도 결코 늦지 않는다.

Scope

스코프는 변수의값을 찾을때확인하는곳 범위를 뜻하며 잘주의해야함.

Array

it('Array의 기본을 확인합니다.', function () {
const emptyArr = [];
expect(typeof emptyArr === 'array').to.equal(false);
expect(emptyArr.length).to.equal(0);

const multiTypeArr = [
  0,
  1,
  'two',
  function () {
    return 3;
  },
  { value1: 4, value2: 5 },
  [6, 7],
];
expect(multiTypeArr.length).to.equal(6);
expect(multiTypeArr[0]).to.equal(0);
expect(multiTypeArr[2]).to.equal('two');
expect(multiTypeArr[3]()).to.equal(3);
expect(multiTypeArr[4].value1).to.equal(4);
expect(multiTypeArr[4]['value2']).to.equal(5);
expect(multiTypeArr[5][1]).to.equal(7);

});
문제에서 포인트는
expect(multiTypeArr[4]['value2']).to.equal(5);
expect(multiTypeArr[5][1]).to.equal(7);
두구문인데 각각 요소안에 요소를 표현할때는 이런방식응로표현하면되고
expect(multiTypeArr[4]['value2']).to.equal(5);위구문은 앞에 예시와,마찬가지로
expect(mulitTypeArr[4].value2 해도 같은결과가나온다.

Object

객체에서 중요했던건 객체를 함수전달인자로전달할경우 레퍼런스가 전달된다는점이었다.
주소복사를하느냐 아니냐가 결과값을 크게달라지게할수있어 이를 주의해야한다.

전개문법

(... )하나만기억하자
concatenated merged 과함께 concat도 비슷한결과값을만들어낼수있다.

구조분해할당

it('rest/spread 문법을 객체 분해에 적용할 수 있습니다 #3', () => {
const user = {
name: '김코딩',
company: {
name: 'Code States',
department: 'Development',
role: {
name: 'Software Engineer'
}
},
age: 35
}

const changedUser = {
  ...user,
  name: '박해커',
  age: 20
}

const overwriteChanges = {
  name: '박해커',
  age: 20,
  ...user
}

const changedDepartment = {
  ...user,
  company: {
    ...user.company,
    department: 'Marketing'
  }
}

expect(changedUser).to.eql({name: '박해커', company: {name: 'Code States', department: 'Development', 
role: {name: 'Software Engineer'}}, age: 20 })

expect(overwriteChanges).to.eql({name: '김코딩', age: 35, company: {name: 'Code States', department: 'Development', 
role: {name: 'Software Engineer'}}})

expect(changedDepartment).to.eql({name: '김코딩', company: {name: 'Code States', department: 'Marketing', 
role: {name: 'Software Engineer'}}, age: 35})

})
})

마지막부분만 간단하게 설명하면 changedDepartment는 user객체를 가져온 후에 , company키의 요소에 user.company의 값들을 할당을 하였다.
department가 user.company 아래에있기때문에, department의 요소가 변화된다. 순서에따라 결과값이 다르게나오기떄문에 주의해야한다.

profile
개발자가되고싶은사람

0개의 댓글