// java
int num = 5/2 = 2
// javascript
var num = 5/2 = 2.5
var str = "string";
str[0] = "S";
console.log(str); // string
var bool = true;
console.log(typeof bool); // boolean
var empty;
console.log(typeof empty); // undefined
// Object()
var obj = new Object();
// obj 객체 프로퍼티 생성
obj.name = 'name';
obj.age = 30;
obj.gender = 'female';
console.log(typeof obj); // objec
console.log(obj); // {name:"name", age:30, gender:"female"}
// 객체 리터럴(표기법)
var obj = {
name : 'name',
age : 30,
gender : 'female'
};
console.log(typeof obj); // objec
console.log(obj); // {name:"name", age:30, gender:"female"}
// {}안에 아무것도 적지 않은 경우
var emptyObj = {};
console.log(typeof emptyObj); // objec
console.log(emptyObj); // {}
// 대괄호 표기법 []
console.log(obj['name']); // name
console.log(obj[name]); // undefined
// 마침표 표기법 .
console.log(obj.name); // name
대괄호 표기법을 사용할 경우 프로퍼티를 '문자열' 형태로 만들어야 함
obj.age = 32; // 갱신 30->32
obj.addr = 'Seoul'; // 동적생성
자바스크립트 객체의 프로퍼티에 값을 할당할 때
NaN : Not a Number
for in 문을 사용하면 객체에 포함된 모든 프로퍼티에 대해 루프 수행
var prop;
for ( prop in obj ){
console.log(prop, obj[prop]);
}
// prop 에 프로퍼티 이름이 하나씩 할당됨
delete 연산자 : 객체의 프로퍼티 삭제, 객체 자체 삭제 못함
var tempObj = {
name : "name",
age : 100,
addr : "seoul"
}
console.log(tempObj.addr); // Seoul
delete tempObj.addr; // addr 프로퍼티 삭제
console.log(tempObj.addr); // undefined
delete tempObj; // 객체 삭제 시도
console.log(tempObj); // {name:"name",age:100}
객체의 모든 연산이 실제 값이 아닌 참조값으로 처리되기 때문에 배열이나 함수 또한 객체로 취급
var objA = {val : 100};
var objB = objA;
기본 타입의 경우 값을 비교
var a = 100;
var b = 100;
console.log(a==b); // true
참조 타입의 경우 참조값이 같아야 true
var objA = {value:100};
var objB = {value:100};
var objC = objB;
console.log(objA==objB); // false
console.log(objB==objC); // true
기본타입의 경우 값에 의한 호출(call by value)
참조타입의 경우 참조에 의한 호출(call by reference)
크기 지정하지 않아도 됨. 어떤 위치에 어느 타입의 데이터를 저장하더라도 에러가 발생하지 않음
객체리터럴은 중괄호{} 사용
배열리터럴은 대괄호[] 사용
var arr = ["apple", "banana", "red", "yello"];
console.log(arr[0]); // apple
아무 인덱스 위치에 값을 동적으로 추가할 수 있음
var emptyArr = [];
console.log(emptyArr); // undefined
// 요소 생성
emptyArr[0] = 0;
emptyArr[3] = 3;
emptyArr[7] = 7;
console.log(emptyArr);
// 크롬 [0, empty × 2, 3, empty × 3, 7]
// IE [0, undefined, undefined, 3, undefined, undefined, undefined, 7]
console.log(emptyArr.length); // 8
배열 내의 가장 큰 인덱스 +1
배열의 length 프로퍼티 값 변경 가능
var arr = [0,1,2];
console.log(arr.length); // 3
arr.length = 5;
console.log(arr); // [0,1,2, undefinedx2 ]
arr.length = 2;
console.log(arr); // [0,1]
console.log(arr[2]); // undefined
자바스크립트에서 배열 역시 객체. 그러나 배열과 일반 객체는 차이가 있음
var arr = ['orange', 'yellow', 'green'];
var obj = {
'0' : 'orange',
'1' : 'yellow',
'2' : 'green'
};
// 1.
console.log(arr[0]); // orange
console.log(obj[0]); // orange : 대괄호 안에 숫자는 자동으로 문자열로 변환됨
// 2. typeof
console.log(typeof arr); // object
console.log(typeof obj); // object
// 3. length
console.log(arr.length); // 3
console.log(obj.length); // undefined
// 4. 배열 표준 메서드 호출
arr.push('red'); // ['orange', 'yellow', 'green', 'red'];
obj.push('red'); // Uncaught TypeError : Object #<Object> has no method 'push'
// 배열과 객체의 프로토타입(부모객체)가 다르기 때문
프로토타입