자바스크립트 변수-연산자-타입

2020-01-21

해당 Post는 Javascript 기초를 정리한 파일입니다.


변수

변수는 var, let, const 로 선언할 수 있습니다.

어떤 것을 사용하는가에 의해서 scope, 즉 변수의 유효범위가 달라집니다.

ES6이전까지는 var를 사용해서 변수를 선언할 수 있습니다.

var a = 2;
var a = "aaa";
var a = 'aaa';
var a = true;
var a = [];
var a = {};
var a = undefined;

조금 더 자세히..

변수 타입구분이 var , const, let 이 있고 해당 변수는 scope 문제 및 중복선언, 값활당에서 차이가 발생합니다.

var 의 경우 변수명이 중복으로 페이지에서 선언되어도 정상작동하고

const, let 은 중복변수명이 존재할 경우 오류발생 합니다.

cosnt 는 java 의 final 속성과 유사하고 선언과 동시에 값할당을 해야합니다.

let 은 선언이 후 값할당이 자유롭습니다.

연산자 - 비교연산자

결과적으로 말하면 정확한 비교는 == 보다는 ===를 사용하는 것을 선호 합니다.

0 == false; //결과는 true
"" == false;//결과는 true
null == false;//결과는 false 이유는 null은 객체값으로 받아들여서.
0 == "0";//결과는 true
null==undefined;//결과는 true

조금 더 자세히.. 이러한 결과가 나타나는 이유는 자기가 임의적으로 암묵적으로 타입을 바꿔서 비교를 하는 성질이 있습니다. 그래서 == 두개를 사용하는 것 보다 === 를 사용하는데 그 이유는 ===가 정확한 타입까지 비교를 해주기 때문입니다.

자바스크립트의 Type

자바스크립트 타입에는 다양한 것이 존재합니다.

undefined, null, boolean, number, string, object, function, array, Date, RegExp 타입은 선언할 때가 아니고, 실행타임에 결정됩니다.

함수안에서의 파라미터나 변수는 실행될 때 그 타입이 결정됩니다.

타입을 체크하는 또렷한 방법은 없습니다.

정확하게는 toString.call 함수를 이용해서 그 결과를 매칭하곤 하는데, 문자, 숫자와 같은 자바스크립트 기본 타입은 ‘typeof’ 키워드를 사용해서 체크할 수 있습니다.

배열은 타입을 체크하는 isArray함수가 표준으로 생겼습니다.

그렇다면 toString.call과 typeof의 차이는 뭘까?

typeof의 문제는 어떤 객체의 인스턴스인지 정확히 알려주지 않는다는 점입니다.


var obj = new Object();
obj.toString(); // "[object Object]"

toString 을 사용하면 어떤 객체의 인스턴스인지까지 한번에 알아낼 수 있습니다.


Object.prototype.toString.call(new String());   // [object String]
Object.prototype.toString.call(Infinity);       // [object Number]
Object.prototype.toString.call(true);           // [object Boolean]
Object.prototype.toString.call(undefined);      // [object Undefined]
Object.prototype.toString.call(null);           // [object Null]
Object.prototype.toString.call([]);             // [object Array]
Object.prototype.toString.call({});             // [object Object]
Object.prototype.toString.call(new Date());     // [object Date]