본문 바로가기

코드스테이츠(Pre)

자바스크립트_데이터타입과 연산자

Primitive Types(Number, String, boolean, undefined, null)

- undefined : Js에 의해 처음 생성된 값, 설정되지 않은(' not set '), Number(undefined) > NaN(not a number)

//by Value (primitives)
var a = 3;
var b;

b = a;
a = 2;

console.log(a);  // 2
console.log(b); // 3

 

Reference Types(Array, Object, Function)

//by Reference (Objects including functions)
var c = { greeting: 'hi'};
var d;

// c와 d가 같은 메모리 공간을 가르키도록함
d = c; 

c.greeting = 'hello'; // mutate

// 같은 주소상 같은 객체를 변경했기 때문에 둘 다 변경
console.log(c);   // Object { greeting: 'hello'}
console.log(d); // Object { greeting: 'hello'}

//by Reference (even as parameters)
function changeGreeting(obj) {
    obj.greeting = 'Hola!';
}

changeGreeting(d);
console.log(c);    // Object { greeting: 'Hola!'}

예외

// = 연산자를 사용하면 새로운 메모리공간을 할당(새로운 주소)
c = {greeting: 'howdy'};

console.log(c); // Object { greeting: 'howdy'}
console.log(d); // Object { greeting: 'Hola!'}

 

- Object

NameSpace : 같은 이름을 갖는 변수나 함수를 다르게 저장하는 공간

var greet = 'hello!';
var greet = 'hola!';

console.log(greet); // hola!
var english = {greet:'hello!'};
var spanish = {greet:'hola!'};

console.log(english.greet);	// hello!
console.log(spanish.greet);	// hola!

 

객체의 요소 추가시 주의사항

english.greeting.greet = 'Hi!'; 
// .연산자 우선순위(left to right)
// english.greeting = undefined

// 객체 생성할때 요소를 추가
english = {greeting: {greet:'Hi!'}};

 

Operator

var a = 2, b = 3, var c = 4;

a = b = c;

console.log(a)
console.log(b)
console.log(c)

연산자우선순위

 

coercion

var a = 1 + '2';
console.log(a);

 

console.log(1 < 2 < 3)	// true

(1 < 2) = true / Number(true) = 1 / (1 < 3) 

console.log(3 < 2 < 1)	// true

(3 < 2) = false / Number(false) = 0 / (0 < 1) 

=== 의 경우 coercion을 하지 않음( == 는 coercion으로 예기치 못한 상황 발생가능)

var a;
if(a){	// 조건문 ()안에 들어가면 boolean으로 coercion된다.
	console.log('something is there');
    }
// 만약 a = 0 이라면?
// if(a || a === 0)