# 변수(variable)
- var 로 선언
- 변수에 저장된 데이터는 처음 할당된 후 변경 될 수 있음
- 변수는 대소문자를 구분함
- 변수는 숫자로 시작할 수 없음
# 연산자(operator)
- 연산자는 하나 또는 두개의 값을 받아 연산을 수행하고 값을 반환
# 원시 데이터 유형
- 숫자(Number) : 부동 소수점 숫자와 정수를 포함
- 문자열(String) : 임의의 개수의 문자로 구성됨
- 부울(Boolean) : true 또는 false
- 정의되지않음(Undefined) : 존재하지 않은 변수에 접근하려할 때 undefined를 받음
- Null : null도 하나의 값임. 값이 없거나 빈 값. undefined 와의 차이점은 null은 정의 되어 있지만 undefined는 정의되어있지않음
위의 원시 유형에 포함되지 않으면 나머지는 다 객체(Object)
# 값 유형 찾기(typeof 연산자)
- 숫자(number)
- 문자열(string)
- 부울(boolean)
- 정의되지않음(undefined)
- 객체(object)
- 함수(function)
# 8진수(octal number)
- ES6부터는 접두사(prefix)
'0o ' 또는 '0O '
# 10진수(decimal number)
# 16진수(hexadecimal number)
- 접두사 '0x ' 를 사용
# 바이너리 리터럴 (binary literal)
- ES6이전
parseInt() 메서드 사용 - ES6이후
접두사 '0b ' 사용
# 지수 리터럴
- 1e1(1e+1 또는 1E+1)은 1뒤에 숫자 0이 있음
→ 10 - 2e+3은 2뒤에 숫자 0이 세개있음
→ 2000 - 2e-3은 2앞에 숫자 0이 세개있음
→ 0.002
# 무한대(Infinity)
- typeof Infinity를 콘솔에 입력하면 "number "
- 0으로 나누면 Infinity
- 자바스크립트에서 처리 할 수 있는 수들
가장 큰 수 : 대략 1e308
가장 작은 수 : 대략 5e-324
1e309는 Infinity로 표현
- 가장 작은 숫자는 -Infinity
- Infinity - Infinity = NaN (Not a Number)
- Infinity + Infinity = NaN
- Infinity 를 피연산자로 사용가능하지만 결과는 Infinity
- isFinite() 는 값이 무한대인지 알려줌
- ES6에서는 Number.isFinite() 메서드 추가
왜 Number.isFinite() 를 쓸까?
→ isFinite()는 Number를 통해 값을 캐스팅하려고 시도하지만 Number.isFinite() 는 그렇지않음
# NaN (Not a Number)
- 이름은 숫자가아닌데 숫자
- typeof NaN; 을 하면 "number " 출력
- 산술연산에 NaN 이 하나라도 있으면 결과는 NaN
- isNaN() 이라는 전역메서드로 판단가능
- ES6에는 유사한 메서드인 Number.isNaN() 제공 (전역이아님)
- isNaN() 과 Number.isNaN() 의 차이점은 평가전 캐스팅 차이
- 숫자인지 여부를 알려면 polyfill 메서드를 사용
* polyfill 이란?
폴리필(polyfill)은 개발자가 특정 기능이 지원되지 않는 브라우저를 위해 사용할 수 있는 코드 조각이나 플러그인을 한다. 폴리필은 HTML5 및 CSS3와
오래된 브라우저 사이의 간격을 메꾸는 역할을 담당한다.
참고 : http://webdir.tistory.com/328
- Number.isInteger() 는 숫자가 유한하고 정수이면 true반환
# 문자열
- 따옴표 안에 아무것도 입력하지않아도(빈공간) 문자열임
- 기호 '+' 를 이용하여 연결
예) "문자열" + "이다"
- 산술연산의 피연산자에 " 1 " 과 같이 숫자같은 문자열을 사용하면, 백그라운드에서 문자열은 숫자로 변환
- 문자열을 숫자로 변환하는 방법
1 을 곱한다.
parseInt()
- 숫자를 문자열로 변환하는 방법
""(빈문자열) 을 연결
- 특수문자
- ' \ ' 는 이스케이프 문자라서 문자열 내에서 따옴표를 사용하고싶을때 이스케이프처리를 한다
예) var str = "I don\'t know";
# 문자열 템플릿 리터럴
- ES6에 템플릿 리터럴(template literal) 도입
- 백틱(back-tick) `` 문자로 묶는다
- 자리표시자(place holder)는 달러기호와 중괄호로 표시 ( ${expression} )
예)
var a = 10;
var b = 10;
console.log(`Sum is ${a + b} and Multiplication would be ${a * b}`);
# 태그된 템플릿 리터럴
- 템플릿 리터럴에 표현식을 프리픽스(prefix)로 사용하면 해당 프리픽스는 호출할 함수로 간주
- 템플릿 문자열이 태그함수에 전달되면, 두개의 폼이 있음
- 백 슬래시가 해석되지 않은 원시(raw)폼
- 백 슬래시가 특별한 의미를 갖는 처리된 폼
예)
function rawTag(strings, ...substitutes){
console.log(strings.raw[0])
}
rawTag`This is a raw text and \n are not treated differently`
# 부울(Boolean)
- 따옴표 없이 사용된 true 및 false
- 논리연산자 (logical operator)
! → 논리 NOT(부정)
&& → 논리 AND(그리고)
|| → 논리 OR(또는)
- 부울이 아닌 값에 논리 연산자를 사용하면 부울로 변환됨 typeof 는 유지
- false 인 값들
- 빈 문자열 ""
- null
- undefined
- 숫자 0
- 숫자 NaN
- 부울 false
- AND( && ) 연산자는 모든 피연산자가 true 일 경우에만 true
- OR( || ) 연산자는 두개의 피연산자중 하나만 true 면 true
- 괄호가 없는 이상 논리연산자의 우선순위는
! → && → || - 우선순위를 결정 하려면 그냥 괄호를 쓰는게 가독성이 좋다
- 자바스크립트 엔진의 지연평가 (lazy evaluation)
참고 : 논리연산이 차례로 진행될 때 어느 시점에 명확한 결과가 나온다면 그 이후의 연산은 최종 결과에 영향을 미치지않으므로 수행하지않음
(불필요한 작업을 피한다)
예)
var b = 5;
true || (b = 6);
true && (b = 6);
- 논리 연산에서 피연산자로 부울이 아닌 표현식이라면 부울이 아닌 값이 반환
예)
true || "something"
true && "something"
true && "something" && true
- 비교연산자(comparison operator)
- '==' 동등비교(Equality comparison)
- 비교하기 전 동일한 유형으로 변환
- 두 연산자가 같으면 true 반환
- 느슨한 비교(loose comparison) 이라고도 불림
- '===' 동등 및 유형 비교(Equality and type comparison)
- 백그라운드에서 유형변환이 일어나지 않음
- 두 연산자가 같고 동일한 유형이면 true 반환(안전성 높음)
- 엄격한 비교(strict comparison) 이라고도 불림
- '!=' 비동등 비교(Non-Equality comparison)
- 피연산자가 서로 같지 않으면 true 반환
- '!==' 유형 변환 없이 비동등 비교(Non-Equality comparison without type conversion)
- 피연산자가 같지 않거나 유형이 다른 경우 true반환
- '>'
- '>='
- '<'
- '<='
참고 : NaN은 자기 자신을 포함한 어떤 것과도 같지 않다.
# Undefined 와 null
- 변수를 초기화하지 않고 선언하면 undefined값으로 자동으로 초기화
선언하지 않은 변수를 typeof 하면 "undefined" 반환
초기화를 하지않고 선언만 한 변수를 typeof 하면 "undefined" 반환
- null은 백그라운드에서 할당하지 않음, 코드에서 직접 할당
- 숫자로 변환
1 * undefined; - NaN으로 변환
1 * null; - 부울로 변환
!!undefined;
!!null; - 문자열로 변환
"value : " + null;
"value : " + undefined;
# 심볼(Symbol)
- ES6에 새로운 원시유형인 심볼(symbol) 도입 (7번째)
- 심볼을 생성할 때 생성자처럼 new 를 쓰지 않는다
var atom = Symbol();
var atom = Symbol('설명기술'); - 고유하고 불변함
# 배열(Array)
- 선언방법 : 대괄호를 사용
예) var a = []; - 배열의 첫번째 index 는 0부터 시작
(배열의길이 : 0 부터 index - 1 까지) - 배열의 index 를 통해 요소 접근 가능하며 변경 가능
- 기존에 존재하지 않는 요소를 추가 할 수 있으며, 간격을두고 추가 할 시엔 undefined 값을 반환
- 요소 삭제시엔 delete 를 사용, 그러나 undefined 로 변경되며 배열의 길이는 유지된다
- 배열 내에 다른배열을 포함시킬 수 있다
- 문자열도 배열이다
각 문자에 접근 가능
'복습 > Javascript' 카테고리의 다른 글
[Javascript] 객체지향 자바스크립트 [클로저] (0) | 2018.02.07 |
---|---|
[Javascript] 객체지향 자바스크립트 [함수는 데이터, 콜백함수, 함수반환, 내부함수] (0) | 2018.02.06 |
[Javascript] 객체지향 자바스크립트 [함수, 호이스팅, 블록범위] (0) | 2018.02.06 |
[Javascript] 객체지향 자바스크립트 [조건문, 반복문, 주석] (0) | 2018.02.05 |
[Javascript] 객체지향 자바스크립트 [기본개념 및 환경설정] (0) | 2018.02.04 |