목록모던 자바스크립트 deep dive (26)
fffo
함수 매개변수(parameter) : 함수 내부로 입력을 전달 받는 변수 인수(argument) : 입력 값 코드의 재사용 → 유지보수의 편의성, 코드의 신뢰성, 코드의 가동성 함수 리터럴 함수는 객체 타입의 값이기 때문에 함수도 함수 리터럴로 생성 가능 일반 객체와 함수 객체의 다른 점 → 함수는 호출 할 수 있음, 함수 객체 고유의 프로퍼티 가짐 함수 이름은 함수 몸체 내에서만 참조할 수 있는 식별자. 생략 가능함 함수 정의 함수 선언문, 함수 표현식, Function생성자 함수, 화살표 함수(ES6)를 통해 정의 각각의 정의 방법은 미묘한 차이가 존재 함수 선언문 함수 선언문은 표현식이 아닌 문 함수 리터럴은 선언문일 수도, 표현식일 수도 있는 중의적 표현 함수 선언문에서는 함수 객체를 가리키는 주..
원시 값과 객체의 비교 원시 값 : 변경 불가능한 값 변수에 할당 시 변수(확보된 메모리 공간)에는 실제 값이 저장됨 원시 값을 가진 변수를 다른 변수에 할당 시 원본의 원시 값이 복사 되어 전달. 값에 의한 전달(pass by value) 객체 : 변경 가능한 값 변수에 할당 시 변수(확보된 메모리 공간)에는 참조 값이 저장됨 객체를 가진 변수를 다른 변수에 할당 시 원본의 참조 값이 복사 되어 전달 됨. 참조에 의한 전달(pass by reference) 원시 값 변경 불가능 하다는 것은 변수가 아닌 값에 대한 진술 데이터의 신뢰성 보장 원시 값이 할당된 변수를 재할당 시 새로운 메모리 공간 확보 후 재할당한 원시 값을 저장, 변수는 새로옵게 재할당한 원시 값을 가리킴 → 불변성 불변성을 갖는 원시 ..
객체 리터럴 객체란 0개 이상의 프로퍼티로 구성된 집합. 프로퍼티는 키와 값으로 구성됨 js는 객체 기반의 프로그래밍 언어, 원시 값을 제외한 나머지 값들은 모두 객체 원시 타입 : 하나의 값을 가짐 변경 불가능한 값(immutable value) 객체 : 다양한 타입의 값을 가짐 변경 가능한 값(mutable value) 모든 값은 프로퍼티 값이 될 수 있음 js의 함수는 값으로 취급할 수 있는 일급 객체임 프로퍼티 값으로 함수가 올 경우 일반 함수와 구분하기 위해 메서드라고 부름 객체 리터럴에 의한 객체 생성 클래스 기반 객체지향 언어(C++, java) : 클래스를 사전에 정의, 필요한 시점에 new 연산자와 함께 생성자(constructor)를 호출하여 인스턴스를 생성하는 방식으로 객체 생성 인스..
타입 변환과 단축 평가 타입 변환 명시적 타입 변환 == 타입 캐스팅 암묵적 타입 변환 == 타입 강제 변환(type coercion) 암묵적 타입 변환 맥락에 맞춰서 js엔진이 암묵적으로 바꿔줌 적절한 암묵적 타입 변환은 가독성에 기여할 수 있음 12 + '' // "12" true + '' // "true" NaN + '' // "NaN" [10,20] + '' // "10,20" +"32" // 32 +null // 0 +true // 1 +false // 0 +undefined // NaN +[] // 0 +[1,2] // NaN Falsy 값들 false undefined null 0, -0 NaN '' (빈 문자열) 명시적 타입 변환 표준 빌트인 생성자 함수를 new 연산자 없이 호출 빌트인 ..
제어문 switch 문 fall through : 평가 결과와 일치하는 case문으로 실행 흐름을 이동하지만 이후의 모든 switch문 안에 있는 코드를 실행하는 것 if ...else 문과 비교해서 가독성이 더 좋은 것을 선택하여 적절히 사용 break 문 중첩된 for문에서 바깥 for문을 탈출 하려면 lable을 사용. 하지만 레이블 문은 프로그램의 흐름을 복잡하게 하고 가독성을 나쁘게 할 수 있으므로 지양 outer: for(let i = 0; i < 3; i++) { for (let j = 0; j < 3; j++) { if(something[i][j] === 3) break outer; } } continue 문 if문 내에서 실행해야 할 코드가 한 줄 이상일 때 continue를 사용하면 깊..
연산자 할당문은 값으로 평가되는 표현식인 문, 할당된 값으로 평가됨 동일 비교 연산자(==)는 타입을 체크하지 않으므로 예측하기 어려운 결과가 나올 수 있음 → 일치 비교 연산자(===) 사용 권장 NaN는 자신과 일치하지 않는 유일한 값 NaN === NaN; // → false 내장 함수 isNaN를 사용해야 함 isNaN(NaN); // → true Object.is 메서드 : 예측 가능한 정확한 비교 결과 반환 -0 === +0 // true Object.is(-0, +0) // false NaN === NaN // false Object.is(NaN, NaN) // true // 이외에는 일치 비교 연산자(===)와 같음 null을 확인 할 때는 typeof함수 대신 일치 비교 연산자(===)를..
데이터 타입 원시 타입 number string boolean undefined null symbol : ES6에서 추가된 타입 객체 타입 : 객체, 함수, 배열 등 number 배정밀도 64비트 부동소수점 형식을 따름 모든 수를 실수로 처리, 정수만 표현하기 위한 데이터 타입이 별도로 존재하지 않음 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64비트 부동소수점 형식의 2진수로 저장되어 값을 참조하면 모두 10진수로 해석됨 const binary = 0b1000001; const octal = 0o101; const hex = 0x41; console.log(binary); // 65 console.log(octal); // 65 console.log(hex); // 65 console...
표현식과 문 값, 리터럴, 표현식, 문 값(value) : 식(표현식)이 평가(evaluate)되어 생성된 결과 리터럴(literal) : 사람이 이해할 수 있는 문자 혹은 약속된 기호를 사용해 값을 생성하는 표기법 js는 런타임에 리터럴을 평가해 값을 생성함 표현식(expression) : 표현식은 값으로 평가될 수 있는 문(statement) 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조함 리터럴 또한 평가될 수 있으므로 표현식의 일종임 표현식과 표현식이 평가된 값은 동치, 즉 값이 위치할 수 있는 자리는 표현식이 올 수 있음 문(statement) : 프로그램을 구성하는 기본 단위이자 최소 실행 단위 토큰 : 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소 표..