# Javascript #software #language ## 문법 ### 변수/상수 선언 `var` 키워드는 함수 내에서, `let` 키워드는 중괄호 블록 내에서 변수 범위를 한정한다. 상수는 `const` 키워드를 사용하며, 선언과 동시에 초기화해야 한다. 단 변수가 객체를 참조할 경우(예: `const a = {b: 3};`) 참조를 바꾸는 것은 허용되지 않으나 참조 값을 바꾸는 것은 가능하다(예: `a.b = 5;`) ### 익명 함수 자바스크립트에서 함수를 다른 함수의 매개변수로 사용하는 가장 직관적인 방식은 콜백(예: `functionA( functionB, c );`)이나, 이 경우 그 함수에 이름을 붙여야 하므로 네임스페이스 충돌이 발생할 수 있다. 이를 해결하기 위해 함수 내용 자체를 매개변수로 넣는 익명 함수(예: `functionA( function(){ return 1; }, c );`) 또는 화살표 함수(예: `functionA( () => { return 1; }, c);`)를 사용할 수 있으며, 자바스크립트 개발자는 후자를 선호한다. ### 논리연산자 `a == b`는 a와 b의 묵시적 값을 비교하나, `a === b`는 양변의 형식도 일치하는지 비교한다. 예를 들어 `‘1‘ == 1`은 true이지만 `‘1‘ === 1`은 false다. ### 배열 배열에 새로운 원소를 추가하려면 push 메소드를, 길이 값을 구하려면 length 필드를 호출하라. 원소의 **값**을 삭제하는 데에는 delete를 사용한다(예: `delete arrayA[4];`). 해당 원소의 공간 자체는 여전히 존재하고 있음을 유의하라. 만일 원소 자체를 삭제하고 나머지를 재배열하려면 splice 메소드를 사용해야 한다. #### 필터링 `find()` 메소드는 배열에서 조건에 부합하는 원소가 있을 시 그 항목을 반환한다(예: `arrayAnimal.find(animal => animal === “rabbit”);`). `filter()` 메소드는 좀 더 복잡한(key-value 형태로 원소가 속성을 갖는) 배열을 필터링할 수 있으며(예: `arrayAnimal.find(animal => animal.color === “white”);`), `some()` 메소드는 조건에 맞는 원소가 있을 시 true를 반환한다. #### 매핑 배열의 각 원소에 속성을 추가하려면 `map()` 메소드를 사용한다(예: `arrayAnimal.map( animal => { animal.age = 1; return animal; })`). #### 집계 `reduce()` 메소드는 배열의 속성을 주어진 함수에 따라 집계하여 하나의 값으로 반환한다(예: `arrayAnimal.reduce((totalAge, animal) => totalAge + animal.age, 0);`는 sum 함수 또는 유사한 역할을 하는 반복문을 대체한다). ### 반복문 forEach문은 for문과 달리 배열의 값과 인덱스에 접근할 수 있으며, 간결하지만 반복을 중단(break 등)할 수 없다는 특징이 있다.