Javascript koans

문종후·2023년 3월 6일

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

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개의 댓글