2017 - 10 - 21 (토)
인사이드 자바스크립트(송형주, 고현준 지음 한빛 미디어) 참조
1 .. 타입
자바스크립트도 자바처럼 타입이 존재한다. 하지만 내가 생각하기에는 그 타입의 구분이 자바처럼 딱딱 맞춰진게 아니라 어느정도 모호한 점이 있다고 생각한다.
그리하여 " 느슨한 타입 체크 " 라는 특성을 가진다.
var intNum = 10;
var floatNum = 0;
var singleStr = 'single quote';
var double = 'double quote';
var boolVAR =true;
var empty;
document.write(typeof intNum, typeof floatNum, typeof singleStr, typeof double, typeof boolVAR, typeof empty)
//결과 Number, Number, String, String, boolean, undefined
//null값은 타입이 undefined로 정의
//숫자형 테스트
var num = 5/2;
console.log(num); // 2.5가 출려된다.
//문자형 테스트
var str = 'test';
console.log(str,str[1],str[2],str[3]);
//결과는 t e s t
//null 과 undefined
var nullVar = null;
console.log(typeof nullVar ===null); // 결과 : false ( typeof 는 해당 변수의 타입을 반환 )
console.log(nullVar ===null); // 결과 : true
// javaScript 는 일치 연산자로 (===)을 사용한다.
자바스크립트도 객체 개념을 가진다. 기존의 객체지향언어와는 약간 개념이 다르다.
자바스크립트에서는 클래스가 없고 생성자, 함수 등을 활용한다.
// Object() 생성자 함수.
var student = new Object();
student.name ='shj';
student.age = 30;
student.gender = 'male';
console.log(typeof student); // 결과는 Object
console.log(student); //출력값은 {name : 'shj' , age : 30, gender : 'male'}
// key : value 쌍으로 된 객체모델을 생성한다.
//객체 리터럴 방식으로 student 객체 생성
var student = {
name : 'shj', age : 30, gender : 'male'
} ;
console.log(typeof student); // 결과 : Object
console.log(student); // 출력값은 {name : 'shj' , age : 30, gender : 'male'}
객체에 접근하기
var student = { name : 'shj' , age : 30}; //객체를 생성함
//객체에 접근하여 프로퍼티 값 읽어오기
console.log(student.name); //java와 비슷한 형태로 객체에 접근한다. 해당 객체.프로퍼티명 으로 값을 불러온다.
console.log(student['name']);
//객체에 접근하여 프로퍼티의 값 갱신하기
student.name = 'hjs'; // name 프로퍼티의 값이 hjs 로 갱신된다.
//프로퍼티 생성
student.gender = 'male'; // student 객체에 gender라는 이름과 male 이라는 값을 가진 프로퍼티 추가
//for - in 문으로 객체 프로퍼티 출력
var prop;
for(prop in student){
console.log(prop, student[prop]);
}
//출력결과
//name hjs
//age 30
//gender male
//프로퍼티 삭제
delete student.name; // name 이란 프로퍼티 삭제.
delete student; //student 객체 삭제
참조타입 // 자바스크립트에서는 기본형(number, string, boolean, null, undefined) 5가지를 제외한 모든 값은 객체이다.
배열이나 함수도 객체로 취급한다. 자바스크립트에서 이 객체를 참조 타입이라고 한다.
var objA ={
val :40
};
var objB = objA;
console.log(objA.val);
console.log(objB.val); // 동일한 값출력
objB.val = 50;
console.log(objA.val);
console.log(objB.val); // 동일한 값출력
//objB = objA 로 메모리상에 같은 주소를 가리키게 하였다. 그러므로 이 두 객체의 값은 같은 val 프로퍼티를 참조하게 된다.
객체 비교 // 객체를 비교할떄는 == 연산자를 사용한다.
var a = 100;
var b = 100;
var objA ={value : 100};
var objB ={value : 100};
var objC = objB;
console.log(a==b); // true 값이 출력된다.
console.log(objA == objB); // FALSE가 출력된다. 이 둘은 값을 비교하는 것이아니다. 참조하고 있는 주소를 비교하는 것이다.
console.log(objB == objC); //true 가 출력된다. 이 두값은 같은 참조변수를 가리키고 있다.
call by value / call by references ( 값에의한 호출과 참조에의한 호출) : 사실상 이러한 개념 뿐만아니라 참조형의 비교 는 자바 개념과 매우 비슷하다. 살짝 쓰는 방식만 다를 뿐..
var a = 100;
var objA = {value : 100};
function changeArg(num, obj){
num = 200; // call by value
obj.value = 200; // call by references
console.log(num);
console.log(obj);
}
changeArg(a, objA); //함수 실행시 objA 참조형의 value 프로퍼티 인자의 값이 변경된다.
console.log(a);
console.log(objA);
//결과
//200
//{value : 200} //참조에 의한 호출
//100
//{value : 200} //
프로토 타입 : 자바스크립의 모든 객체는 조상 객체와 연결이 되어있다. 상속개념처럼 조상의 프로퍼티 (자바의경우 인스턴스라 칭함)을 자신의 것처럼 쓸 수 있는것 처럼 말이다. 자바스크립트에서는 이러한 조상의 객체를 프로토타입이라고 한다.
var student = {
name = 'shj'
}
console.log(student.toString());
// 출력결과가 [object Object] 형태로 나온다. (자바에서)모든 객체의 조상은 Object인것처럼 자바스크립트도 마찬가지이다.
// 최고 조상인 Object 에는 toString() 함수가 정의되어있다.
배열 생성및 배열크기 조절 / 배열의 값 변경
var nameArr = ['shj','chj','lhj'];
console.log(nameArr[0]); // 출력값 shj // 다른 언어와 다를게 없는 배열문법이다.
console.log(numArr.length); //출력값 3 // .length 로 배열의 길이를 반환
nameArr.length = 5;
console.log(nameArr); // ['shj','chj','lhj', undefined*2]
//javascript 배열은 기본적으로 동적인 배열인것 같다.
nameArr.push('plh'); //자바에서 collections 에서 .add 또는 .put으로 배열에 값을 추가하는 것처럼 push 로 추가한다.
nameArr[4]='abc'; // nameArr 의 5번째 값을 abc로 변경한다.
배열의 열거 / 배열 삭제
//배열의 열거
for (var prop in nameArr){
console.log(prop,nameArr[prop]);
}
for (var i =0; i <nameArr.length; i ++){
console.log(nameArr[i]);
}
//배열요소 삭제
delete nameArr[2]; // 3번째 배열의 값 삭제
//splice 함수 사용
nameArr.splice(0, 2); // 0 번째 부터 2개의 원소 삭제
Array() 생성자 함수
var studentList = new Array(3);
console.log(studentList); //출력값 [undefined, undefined, undefined]
console.log(studentList.length) //출력값 3
연산자 ( + )
var ex1 = 1+2;
var ex2 = 'my' +'string';
var ex3 = 1 + 'string';
var ex4 = 'string' +2;
console.log(ex1); // 출력값 : 3
console.log(ex2); // 출력값 : my string
console.log(ex3); // 출력값 : 1string // 자바와 달리 문자열과 숫자의 결합이 가능 1 이 문자열로 변하는듯
console.log(ex4); // 출력값 : string2
연산자 ( ==, === )
console.log(1 == '1'); // 출력값 true (타입이 다르더라도 값이 같다고 판단한다)
console.log(1 === '1'); // 출력값 false (==보다 좀더 상세히 비교 타입까지 같아야한다.)