Web development/Modern JavaScript Deep Dive

변수를 선언하게 되면 값을 저장하기 위한 메모리 공간을 확보(allocate)하고 변수 이름과 확보된 메모리 공간의 주소를 연결(name binding)하여 값을 저장할 수 있게 준비하는 것이다. 확보된 메모리 공간은 선언을 통해 보호되므로 다른 메모리가 들어올 수 없다. 변수 선언은 var, let, const 키워드를 통해 사용한다. ES5까지는 var만 됐지만 ES6에서는 let, const가 추가되었다.(var도 쓸 수는 있다. 자바스크립트는 이미 전세계에서 사용하고 있기 때문에 뭐 하나 삭제하면 순식간에 사이트가 엄청 날라가기 때문에 추가 업데이트만 한다.) 블록 레벨 스코프(block-level scope)를 지원하지 않고 함수 레벨 스코프(function-level scope)를 지원하여 의..
논리연산자는 무조건 true나 false로 평가되지 않을 수 있다. 그 전에는 나도 몰랐는데 이제와서 뒤통수 얼얼.. 논리합(||)과 논리곱(&&) 연산자 표현식은 언제나 2개의 피연산자 중 어느 한쪽으로 평가된다. 'a' && 'b' //"b" 여기서 b가 출력된 이유는? 논리복(&&)은 두 피연산자가 모두 true로 평가될 때만 true를 반환한다. 'a'는 Truthy 갑이므로 true로 평가됐지만 다음 피연산자까지 Truthy값을 가져야만 true를 반환할 수 있으며 이 외 falsy값을 넣을 경우에는 false를 반환한다. 그러므로 뒤에 있는 피연산자 'b'가 논리곱 연산자 표현식의 평가 결과를 결정하는 것이다. 이 때, 논리곱 연산자는 연산의 결과를 true로 만들어준 피연산자인 'b'를 반환..
자바스크립트의 모든 값은 타입이 있다. 이러한 값은 개발자의 의도에 따라 의도적으로 타입을 변환시킬 수도 있고, 자바스크립트 엔진에 의해 암묵적으로 변환되기도 한다. 자바스크립트 엔진이 자체 실행한 타입 변환은 암묵적 타입 변환(implicit coercion) 또는 타입 강제 변환(type coercion)이라 한다. 개발자가 의도적으로 값의 타입을 변환하는 것을 명시적 타입 변환(explicit coercion) 또는 타입 캐스팅(type casting)이라 하고, 1. 암묵적 타입 변환 자바스크립트 엔진이 표현식을 평가할 때, 어쩔 수 없이 타입이 달라 자체적으로 값의 타입을 변환해야 하는 경우가 있다. '10' + 2 // '102', 2를 문자열로 강제변환 이와 같이 타입 강제 변환 없이는 연산..
변수란? 변수의 정의는 '하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름'이다. 이를 이해하기 위해선 컴퓨터 구조를 알아야 할 필요성이 있다. 우리가 연산을 실행할 때 컴퓨터는 CPU를 사용해 연산하고, 메모리를 사용하여 데이터를 기억한다. 메모리는 데이터를 저장할 수 있는 메모리 셀의 집합체이다. 메모리 셀 하나의 크기는 1바이트(8비트)이며 컴퓨터는 메모리 셀의 크기, 즉 1바이트 단위로 데이터를 저장하거나 읽어들인다. 메모리 셀 하나의 크기가 8비트이고, 이를 통해 고유의 메모리 주소를 갖는데 이 위치를 표현하기 위해 메모리의 크기만큼 정수로 표현한다. (0x0000000~0xFFFFFFFF) 8비트이기 때문에 8자리 숫자까지 간다. 참고로 여기서..
제어문(control flow statement)는 닉값답게 코드 블록을 실행(조건문)하거나 반복 실행(반복문)할 때 사용한다 코드는 위에서 아래로 실행되지만 제어문을 통해 제어할 수 있다. 1. 블록문(block statement/compound statement) 0개 이상의 문을 중괄호로 묶은 것 제어문이나 함수 선언문 등에 블록문이 들어간다 블록문 자체가 문의 종료를 의미하는 자체 종결성을 갖기 때문에 블록문의 끝에는 세미클론을 붙이지 않는다. //블록문 { var a = 1; } //제어문 var a = 1; if(a0) b = "양수"; else if (a (연도가 4로 나눠떨어짐&&연도가 100으로 나누어 떨어지면 안된다) || 연도가 400으로 나누어 떨어져야 한다 days = ((year..
1. 할당 연산자 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당. 좌항 변수에 값을 할당함으로 좌항의 값이 변하므로 부수효과 있음. x += 5; x = x+5 다른 연산자들도 똑같이 표현됨 참고로 할당문은 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가된다. var a; console.log(a=10); //10 그러니 밑 문처럼 써도 10이 출력됨을 알 수 있다. 2. 비교 연산자 2-1. 동등/일치 비교 연산자 좌항과 우항 비교 후 불리언 값으로 변환 x==y //동등 비교(값) x===y //일치 비교(값과 타입) x!=y //부동등 비교(값) x!==y //부동등 비교(값과 타입) 주의해야 할점은 좌앙 우항 피연산자 비교 과정에서 자바스크립트 엔진이 암묵적 타입 변환을 통해 ..
연산자는 하나 이상의 표현식을 대상으로 산살, 할당, 비교, 논리, 타입, 지수 연산 등을 수행하여 하나의 값으로 만든다. 연산자(operator)와 피연산자(operand) 모두 값으로 평가될 수 있는 값이어야 하며, 연산자로 조합된 표현식도 값으로 평가될 수 있어야 한다. 산술 연산자 : 수학적 계산으로 새로운 숫자 값을 만드는 연산자 산술연산자의 종류는 세 가지가 있다. 1. 이항(binary) 산술 연산자 2개의 피연산자를 산술 연산하여 숫자 값을 만드는 연산자 모든 이항 산술 연산자는 피연산자의 값을 변경하는 부수 효과(side effect)는 모두 없다. 모두 새로운 값으로 만드는 것이다. + 덧셈 - 뺄셈 * 곱셈 / 나눗셈 % 나머지 간단하게 1+2, 2-3 등으로 표현하는게 이항 산술 연..
동적 타이핑과 정적 타이핑의 차이점은 변수의 타입이 결정하는 방식에 따라 둘로 나뉜다. 정적 타이핑은 내가 먼저 넣을 값의 데이터 타입을 작성해줘야 한다. char a;//a 변수에는 1바이트 정수 타입의 값(-128~127)만 할당 가능 int b; //b 변수에는 4바이트 정수 타입의 값(-2,124,483,684~2,124,483,647)만 할당 가능 이처럼 정적 타입은 내가 먼저 넣을 값의 데이터 타입을 작성하고, 값 또한 이에 맞게 넣어줘야 한다. 처음 설정한 타입은 후에 변경할 수 없다. 데이터 타입과 맞지 않게 쓴다면, 에러가 뜨기 때문에 타입의 일관성을 유지할 수 있게 해줌으로써 안정성을 늘린다. 이러한 정적 타입(static/strong type)언어는 C나 자바, 고, 러스트 등이 있다..
자바스크립트의 모든 값은 데이터 타입을 가진다. 데이터 타입은 원시 타입과 객체 타입으로 나눌 수 있다. 원시 타입 (primitive type) 숫자(number) 타입 정수+실수 문자열(string) 타입 문자열 불리언(boolean) 타입 논리적 참(true), 거짓(false) undefined 타입 var 키워드로 선언된 변수에 암묵적으로 할당하는 값 null 타입 값이 없다는 것을 의도적 명시 심벌(symbol) 타입 중복 방지 객체 타입 (object/reference type) 객체, 함수, 배열 등 유명한 예시로 1+1 =2/'1'+1'='11'를 보면 왜 데이터 타입이 중요한지 알 수 있다. 이렇게 문자열과 숫자 구별 말고도 다른 이유는 메모리 공간의 확보와 참조이다. 자바스크립트 타입..
문이과 통합형 인재(人災)
'Web development/Modern JavaScript Deep Dive' 카테고리의 글 목록 (2 Page)