이 글은 자바스크립트의 핵심 개념들을 깊이 있게 탐구하고 설명합니다. 변수부터 시작하여 데이터 타입, 배열, 객체, 연산자, 제어 구조, 함수, 이벤트 등 다양한 주제를 다룹니다. 이 글을 통해 독자들은 자바스크립트의 기본적인 구조와 동작 방식을 더 잘 이해할 수 있게 될 것입니다.
변수는 데이터 값을 저장하기 위한 컨테이너입니다. 자바스크립트에는 var, let, const 세 가지 유형의 변수가 있습니다.
let x = 5; // x는 5입니다
const pi = 3.14; // pi는 상수 3.14입니다
자바스크립트에는 Number, String, Boolean, Object, Function, Null, Undefined 등 여러 데이터 타입이 있습니다.
let num = 123; // Number - 정수
let floatNum = 123.456; // Number - 실수
let string = "Hello"; // String
let isTrue = true; //Boolean - 참
let isFalse = false; //Boolean - 거짓
let obj = { //Object - 객체데이터, 여러 가지 값과 속성을 가질 수 있는 복합 데이터 타입
name: "John",
age: 30,
city: "New York"
};
let nothing = null; //Null - 어떤 값도 없음을 나타내는 특별한 값입니다.
let notDefined; //Undefined - 값이 할당되지 않은 변수의 기본 값입니다.
//Symbol - 고유하고 변경 불가능한 데이터 타입으로 주로 객체 속성의 키로 사용
let sym = Symbol("symbol description");
//BigInt - Number 타입으로 표현할 수 있는 범위를 넘어서는 정수를 다룰 때 사용합니다.
let bigInt = 1234567890123456789012345678901234567890n;
배열은 단일 변수에서 여러 값을 저장하는 데 사용됩니다.
let fruits = ["apple", "banana", "cherry"]
객체도 변수입니다. 그러나 객체는 여러 값을 포함할 수 있습니다.
let car = {type: "Fiat", model: "500", color: "white"};
자바스크립트에는 산술 연산자, 비교 연산자, 비트 연산자, 논리 연산자, 할당 연산자 등이 포함되어 있습니다.
let x = 5;
let y = x + 2; // y는 이제 7입니다
제어 구조는 프로그램의 흐름을 처리하는 데 도움을 줍니다. 이에는 if, else, switch, for, while, do-while 등이 포함됩니다.
if (x > y) {
// 무언가를 수행합니다
} else {
// 다른 무언가를 수행합니다
}
함수는 나중에 호출하거나 이벤트에 응답하여 정의할 수 있는 코드 블록입니다.
function myFunction(x, y) {
return x * y;
}
자바스크립트의 HTML과의 상호 작용은 사용자나 브라우저가 페이지를 조작할 때 발생하는 이벤트를 통해 처리됩니다.
<button onclick="myFunction()">Click me</button>
문자열은 텍스트 형식으로 표현할 수 있는 데이터를 보유하는 데 유용합니다. 문자열과 함께 사용할 수 있는 여러 메소드가 있습니다. 이에는 length, index0f, search, replace 등이 포함됩니다.
let txt = "Hello World!";
let x = txt.length; // x는 이제 12입니다
자바스크립트에는 숫자 유형이 하나만 있습니다. 숫자는 소수점이 있는 또는 없는 상태로 작성할 수 있습니다. 자바스크립트 숫자는 또한 지수를 나타내기 위해 +와, 그리고 e를 포함할 수 있습니다.
let x = 123e5; // x는 12300000입니다
let y = 123e-5; // y는 0.00123입니다
메소드는 객체에 속한 함수를 의미합니다. 객체 지향 프로그래밍에서, 객체는 데이터(속성)와 그 데이터를 조작하는 방법(메소드)를 함께 묶은 것입니다.
메소드는 객체의 속성으로 저장되는 함수입니다. 이 메소드는 객체의 속성을 조작하거나, 객체의 상태를 활용하여 특정 작업을 수행할 수 있습니다.
자바스크립트에서는 다음과 같이 메소드를 정의하고 호출할 수 있습니다:
let obj = {
name: "John",
sayHello: function() {
console.log("Hello, " + this.name);
}
};
obj.sayHello(); // "Hello, John"을 출력합니다.
위의 예시에서 **sayHello
**는 obj
객체의 메소드입니다. **this.name
**에서 **this
**는 메소드가 속한 객체를 참조합니다. 따라서 **this.name
**은 **obj.name
**을 참조하게 됩니다.
메소드는 객체의 내부 상태를 읽고, 변경하고, 그 상태를 바탕으로 어떤 계산을 수행하는 등의 작업을 할 수 있습니다. 이런 방식으로 메소드는 객체의 동작을 정의하고, 객체의 데이터를 안전하게 캡슐화하고 조작하는 데 사용됩니다.
자바스크립트 Date 객체는 플랫폼에 독립적인 형식으로 단일 시점을 나타냅니다. Date 객체는 Unix Epoch 이후에 경과한 밀리초를 나타내는 Number를 포함합니다.
let d = new Date();
자바스크립트 Math는 수학 상수와 함수에 대한 속성과 메소드를 가진 내장 객체입니다.
console.log(Math.PI); // 3.141592653589793
console.log(Math.sqrt(16)); // 4
불리언은 두 가지 값, 즉 true 또는 false를 반환하는 데이터 유형입니다.
let isCodingFun = true;
let isFishTasty = false;
자바스크립트는 try, catch, finally 블록을 통해 예외 처리를 허용합니다. try에는 실행할 코드가 포함되어 있고, catch는 모든 오류를 잡아내며, finally는 오류가 발생하든 안 하든 코드를 실행합니다.
try {
notAFunction();
} catch(err) {
console.log(err); // ReferenceError: notAFunction is not defined
} finally {
console.log('This will run regardless of the try/catch result');
}
정규 표현식은 문자 패턴을 설명하는 객체입니다.
let patt = new RegExp("e");
let res = patt.test("The best things in life are free!");
JSON (JavaScript Object Notation)은 사람이 읽고 쓰기 쉽고, 기계가 파싱하고 생성하기 쉬운 경량 데이터 교환 형식입니다.
let text = '{"name":"John", "birth":"1986-12-14", "city": "New York"}';
let obj = JSON.parse(text);
AJAX는 전체 페이지를 다시 로드하지 않고 웹 페이지의 일부를 업데이트하는 것에 관한 것입니다. Asynchronous JavaScript and XML의 약자입니다.
let xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// 문서가 준비되었을 때 수행되는 전형적인 작업 document.getElementById("demo").innerHTML = xhttp.responseText;
}
};
xhttp.open("GET", "filename", true); xhttp.send();
프로미스는 비동기 작업의 최종 완료 또는 실패를 나타내는 객체입니다.
let promise = new Promise(function(resolve, reject) {
// 무언가를 수행하고, 아마도 비동기적으로, 그리고 나서...
if (/* 모든 것이 잘 됐다면 */) {
resolve("Stuff worked!");
} else {
reject (Error("It broke"));
}
});
async와 await는 프로미스를 더 쉽게 작성할 수 있게 합니다.
async function example() {
let response = await fetch('https://api.github.com/users/github');
let user= await response.json();
return user;
}
클로저는 함수와 그 주변 상태(렉시컬 환경)에 대한 참조가 함께 묶인(포함된) 것입니다.
function makeAdder (x) {
return function (y) {
return x + y;
};
}
let add5 = makeAdder (5);
let add10 = makeAdder(10);
console.log(add5(2)); // 7
console.log(add10(2)); // 12
화살표 함수는 함수를 작성할 때 더 짧은 구문을 허용합니다. 화살표 함수는 자체 this를 가지고 있지 않습니다.
const square = x => x * x;
템플릿 리터럴은 변수와 표현식을 문자열에 쉽게 삽입할 수 있게 해줍니다.
let name="John";
console.log(`Hello, ${name}!`); // "Hello, John!"
스프레드 연산자는 0개 이상의 인수가 예상되는 곳에서 이터러블을 확장할 수 있게 해줍니다. 나머지 매개변수 구문은 함수가 배열로서 무한정의 인수를 받아들일 수 있게 해줍니다.
// 스프레드 연산자
let arr1 = [1, 2, 3];
let arr2 = [...arr1, 4, 5, 6]; // [1, 2, 3, 4, 5, 6]
// 나머지 매개변수
function sum(... theArgs) {
return theArgs.reduce((previous, current) => {
return previous + current;
});
}