자바스크립트란?
- 1995년 Brendan Eich가 발명
- 1997년부터 ECMA가 표준화, 현재는 7까지 나옴
- 자바스크립트(JavaScript)는 웹을 위한 인터프리터 언어이자 스크립트 언어다.
- 컴파일이 필요하지 않다. 그냥 HTML 웹 페이지에 스크립트를 삽입하기만 하면 동작하며 최신 웹 브라우저에서 모두 동작한다.
자료형
- tyepof 연산자로 변수나 리터럴 타입 확인가능
- false로 나오는 값 : 0, -0, “”, null, false, NaN, undefined
- true로 나오는 값 : false가 아닌값 전부
숫자형 | number | 123, 0, -1, 3.14 등 |
문자형 | String | "aaa", "", "123", 'aaa', '1' 등 |
논리형 | boolean | false, true |
기타 | null undefined |
null, undefined |
파생형 | object | - 모든객체의 타입은 object - 배열, 함수도 객체다 but 함수의 타입은 function |
function |
동적 타입
- 자바스크립트에서는 변수의 타입은 동적으로 결정
- 값이 저장되지 않은 변수의 타입의 값은 undefined
var x; // x의 타입은 undefined, 값도 undefined
- 값이 저장되어야 변수의 타입이 결정된다.
x = 1; // x의 타입은 number, 값은 10
- 다른타입의 값이 저장되면, 변수의 타입이 바뀐다.
x = "aaa" // x의 타입은 string, 값은 "abc"
변수의 범위(scope)
- 전역 변수
- 함수의 외부에서 선언된 모든 변수는 전역 범위(global scope)를 가집니다. 브라우저에서, 전역 컨텍스트(또는 scope)는 window 객체를 가리킵니다.
- 지역 변수
- 함수내에 정의된 변수는 지역 범위이며, 해당 함수와 내부함수에서만 접근가능하다. 예외로 클로저(closure)를 이용하면 외부에 접근이 가능하다.
※ 호이스팅(hoisting)
- 호이스팅이란 변수를 선언하고 초기화했을 때 선언 부분이 최상단으로 끌어올려지는 현상을 의미합니다.
function showName() {
console.log("First Name : " + name);
var name = "Ford";
console.log("Last Name : " + name);
}
showName();
// First Name : undefined
// Last Name : Ford
// First Name이 undefined인 이유는 지역변수 name이 호이스트 되었기 때문입니다.
이 코드는 자바스크립트 엔진에 의해 다음과 같이 해석됩니다.
function showName() {
var name; // name 변수는 호이스트 되었습니다. 할당은 이후에 발생하기 때문에, 이 시점에 name의 값은 undefined 입니다.
console.log("First name : " + name); // First Name : undefined
name = "Ford"; // name에 값이 할당 되었습니다.
console.log("Last Name : " + name); // Last Name : Ford
}
변수의 선언이 최상단으로 끌어올려졌기 때문이다.
sayWow();
sayYeah(); // 여기서 대입되기 전에 호출해서 에러
var sayYeah = function() {
console.log('yeah');
}
function sayWow() { // 선언과 동시에 초기화(호이스팅)
console.log('wow');
}
하지만 같은 함수여도 함수 표현식으로 선언한 경우에는 에러가 발생합니다.
형변환
- 숫자변환 함수 : Number(), parseInt(), parseFLoat()
- Number() 와 parseInt() 차이
- 문자열이 숫자가 아닌 경우가 Number()와 조금 다른데 문자열이 숫자로 시작하는 경우에는 숫자가 끝날때 까지만 형변환을 하여 num에 저장됩니다. 시작이 숫자가 아니면 Number()와 마찬가지로 num에 NaN이 저장됩니다.
var x = Number("123abc") // x=NaN var x = parseInt("123abc") // x=123 var x = parseInt("abc123") // x=NaN
- 문자열변환 함수 : String()
- boolean변환 함수 : Boolean(), !!