자바스크립트(JavaScript)는 객체 기반의 스크립트 프로그래밍 언어로서, 웹 페이지를 동적으로 개발하기 위해 사용합니다. HTML이 웹의 구조(structure)를 담당하고, CSS가 웹의 표현(presentation)을 담당한다면, 자바스크립트는 웹의 동작(behavior)을 담당한다고 할 수 있습니다.
목차
HTML에서 자바스크립트를 포함하는 방법
(1) <script> 태그 이용, 내부에서 직접 스크립트 작성
<script type="text/javascript">
</script>
(2) <script> 태그 이용, 외부 js 파일 불러오기
<script type="text/javascript" src="script.js"></script>
(참고 : 페이지의 모든 HTML은 위에서부터 아래의 순서 그대로 실행됩니다. 이 때문에 특정 요소를 포함한 HTML 코드보다 JavaScript를 먼저 불러와버리면 코드가 올바르게 동작하지 못합니다. 따라서 스크립트 요소를 본문의 맨 마지막(</body> 태그 바로 앞)에 배치하는 것이 안전합니다. 또는 외부 스크립트 파일을 참조하는 경우, defer 속성을 사용해 브라우저가 <script> 태그를 마주쳐도 그 이후의 HTML 콘텐츠를 계속 불러오도록 지정할 수 있습니다.)
<script src="script.js" defer></script>
변수 (Variables)
변수(Variable)는 값(value)을 저장(할당)하고 그 저장된 값을 참조하기 위해 사용합니다. 변수는 위치(주소)를 기억하는 저장소로서, 메모리 주소(Memory address)에 접근하기 위해 사람이 이해할 수 있는 언어로 지정한 식별자(identifier)입니다.
변수 생성 단계
var value; //변수의 선언
value = 'A'; //값의 할당
value = 'B'; //값의 재할당
value; //변수의 참조
- 선언 단계(Declaration phase) : 변수 객체(Variable Object)에 변수를 등록합니다. 이 변수 객체는 스코프가 참조하는 대상이 됩니다.
- 초기화 단계(Initialization phase) : 변수 객체(Variable Object)에 등록된 변수를 메모리에 할당합니다. 이 단계에서 변수는 undefined로 초기화됩니다.
- 할당 단계(Assignment phase) : undefined로 초기화된 변수에 실제값을 할당합니다.
var, let, const 비교
변수 | 재선언 | 재할당 | 선언 이전 참조 | 유효 범위 (scope) |
var | O | O | undefined | 함수 레벨 스코프 |
let | X | O | ReferenceError | 블록 레벨 스코프 |
const (상수) | X | X | ReferenceError | 블록 레벨 스코프 |
var x = 1;
var x = 100; //중복 선언 가능
x = '홍길동'; //재할당 가능
let y = 1;
//let y = 100; //중복 선언 불가(Uncaught SyntaxError: Identifier 'y' has already been declared)
y = 100; //재할당 가능
const z = 1;
//const z = 100; //중복 선언 불가(Uncaught SyntaxError: Identifier 'z' has already been declared)
//z = 100; //재할당 불가(Uncaught TypeError: Assignment to constant variable.)
변수 호이스팅 (Hoisting)
호이스팅이란 모든 선언문이 해당 Scope의 선두로 옮겨진 것처럼 동작하는 특성을 의미합니다. 자바스크립트는 모든 선언문(var, let, const, function, class)이 선언되기 이전에 참조 가능합니다.
console.log(foo); //undefined
var foo = 123;
console.log(foo); //123
console.log(bar); //Uncaught ReferenceError: Cannot access 'bar' before initialization
let bar;
(참고 : let 역시 호이스팅되었으나 참조에러가 발생합니다. 이는 var 키워드로 선언된 변수는 선언 단계와 초기화 단계가 한번에 이루어지는 반면, let 키워드로 선언된 변수는 선언 단계와 초기화 단계가 분리되어 진행되기 때문입니다.)
자바스크립트의 데이터 타입
자바스크립트는 다른 프로그래밍 언어와 달리 변수를 선언할 때 데이터 타입을 미리 지정하지 않습니다. 변수에 할당된 값의 타입에 의해 동적으로 변수의 타입이 결정됩니다. 이를 동적 타이핑(Dynamic Typing)이라 합니다. 또한, 정수와 실수가 모두 number 타입으로 관리되며, 문자(character) 타입이 따로 없고 모두 문자열(string) 타입으로 관리됩니다.
기본(원시) 데이터 타입 (Primitive Data Type: PDT) |
수치형 | number | 정수와 실수 |
문자형 | string | 문자와 문자열 (" ", ' ' 모두 가능) | |
논리형 | boolean | true 또는 false | |
특수형 | undefined | 정의되지 않음 (변수가 존재하나 자료형이 정해지지 않은 상태) | |
null | 객체 없음 (변수가 존재하나 null이 할당된 상태) | ||
참조 데이터 타입 (Reference Data Type: RDT) |
객체형 | object | 객체, 배열, 함수 등 |
typeof 연산자로 데이터 타입 확인하기
var num = 12;
console.log(typeof num); //number
var name = '홍길동';
console.log(typeof name); //string
var result = true;
console.log(typeof result); //boolean
var x;
console.log(typeof x); //undefined
var y = null;
console.log(typeof y); //object
var array = [1,2,3,4];
console.log(typeof array); //object
var obj = { "username":"이순신", "age":44 }; //key:value
console.log(typeof obj); //object (JSON(JavaScript Object Notation)객체)
console.log(obj.username, obj["age"]); //이순신 44
var f = function(){};
console.log(typeof f); //function
형 변환 (type conversion)
명시적 형 변환
var num = 12;
console.log(typeof num); //number
num = String(num);
console.log(typeof num); //string
var num2 = "123";
console.log(typeof num2); //string
num2 = Number(num2); //parseInt(num2) 가능
console.log(typeof num2); //number
console.log(Number("홍길동")); //NaN (Not a Number)
console.log(Boolean(1)); //true
console.log(Boolean(0)); //false
묵시적 형 변환
// -,*,/ 연산시 number로 자동 형변환
var x1 = "10" - 5; //5
var x2 = "10" * 5; //50
var x3 = "10" / 5; //2
var x0 = "10"+1+2; //+ 자동 형변환 안됨 문자열 1012
var x00 = 1+2+"10" //문자열 310
//boolean으로 자동 형변환
//0,'',null,undefined,NaN : false
//그외 : true
var y1 = 0;
if (y1) {} //false
var y2 = "홍길동";
if (y2) {} //true
연산자 (operator)
산술 연산자
var a = 10;
var b = 3;
console.log(a+b); //13
console.log(a-b); //7
console.log(a*b); //30
console.log(a/b); //실수 3.3333333333333335
console.log(a%b); //나머지 1
증감 연산자
var y = 3;
var y2 = 3;
++y; //4
y2++; //4
console.log(y + " " + y2); //4 4
//전치: 더하기1한 후 값 사용
var y3 = ++y; //y=5 -> y3=5
console.log(y + " " + y3); //5 5
//후치: 값 사용한 후 더하기1
var y4 = y2++; //y4=4, y2=5
console.log(y2 + " " + y4); //5 4
대입 연산자
var a = 10;
var b = 5;
console.log(a += b); //a = a+b //15
console.log(a -= b); //a = a-b //10
console.log(a *= b); //a = a*b //50
console.log(a /= b); //a = a/b //10
console.log(a %= b); //a = a%b //0
비교 연산자
var v1 = 10;
var v2 = 9;
console.log(v1 == v2); //false
console.log(v1 > v2); //true
console.log(v1 >= v2); //true
console.log(v1 < v2); //false
console.log(v1 <= v2); //false
console.log(v1 != v2); //true
// == vs ===
var w1 = 10;
var w2 = "10";
console.log(w1 == w2); //true //필요시 형변환 후 내용비교 (equal)
console.log(w1 === w2); //false //형변환하지 않고 타입비교까지 (identical)
논리 연산자
//or 좌객체 참 => 좌객체 리턴 / 좌객체 거짓 => 우객체 리턴
console.log("123" || 10); //123
console.log(0 || 10); //10
//and 좌객체 참 => 우객체 리턴 / 좌객체 거짓 => 좌객체 리턴
console.log("123" && 10); //10
console.log(0 && 10); //0
//not
console.log(!0); //true
3항 연산자
//(조건식)? 참값:거짓값
var aaa = (4>3)? 100:200;
console.log(aaa); //100
참고
https://developer.mozilla.org/ko/docs/Learn/JavaScript
https://poiemaweb.com/js-data-type-variable
https://fromnowwon.tistory.com/entry/var-let-const-scope
'WEB > JavaScript' 카테고리의 다른 글
[JavaScript] 윈도우 (Window) 객체 (0) | 2022.06.28 |
---|---|
[JavaScript] 문자열 (String) 객체 (0) | 2022.06.27 |
[JavaScript] 배열 (Array) 객체 (0) | 2022.06.27 |
[JavaScript] 자바스크립트 기초 문법 - 함수 (0) | 2022.06.27 |
[JavaScript] 자바스크립트 기초 문법 - 제어문 (0) | 2022.06.26 |
댓글