javascript cheatsheet

    

JavaScript 기능들을 정리한 치트시트를 제공합니다. 이 치트시트는 데이터 구조와 알고리즘을 구현하는 데 필요한 기본적인 구문과 기능을 포함하고 있습니다.


## JavaScript Coding Cheat Sheet


### 1. **기본 문법**


#### 변수 선언

```javascript

let variable = value;   // 변수 선언 (변경 가능)

const constant = value; // 상수 선언 (변경 불가)

```


#### 함수 선언

```javascript

// 함수 선언식

function functionName(params) {

  // 함수 내용

}


// 함수 표현식

const functionName = function(params) {

  // 함수 내용

};


// 화살표 함수

const functionName = (params) => {

  // 함수 내용

};

```


### 2. **기본 데이터 구조**


#### 배열 (Array)

```javascript

let arr = [1, 2, 3];


// 배열 길이

console.log(arr.length);


// 배열 요소 접근

console.log(arr[0]);


// 배열의 끝에 추가

arr.push(4);


// 배열의 끝에서 제거

arr.pop();


// 배열의 앞에 추가

arr.unshift(0);


// 배열의 앞에서 제거

arr.shift();

```


#### 객체 (Object)

```javascript

let obj = {

  key1: 'value1',

  key2: 'value2'

};


// 속성 접근

console.log(obj.key1);


// 속성 추가 또는 변경

obj.key3 = 'value3';


// 속성 제거

delete obj.key2;

```


### 3. **반복문 및 조건문**


#### 반복문

```javascript

// for 반복문

for (let i = 0; i < arr.length; i++) {

  console.log(arr[i]);

}


// for...of 반복문 (배열)

for (let element of arr) {

  console.log(element);

}


// for...in 반복문 (객체)

for (let key in obj) {

  console.log(key, obj[key]);

}


// while 반복문

let i = 0;

while (i < arr.length) {

  console.log(arr[i]);

  i++;

}

```


#### 조건문

```javascript

if (condition) {

  // 조건이 참일 때

} else if (anotherCondition) {

  // 또 다른 조건이 참일 때

} else {

  // 조건이 거짓일 때

}


// 삼항 연산자

let result = condition ? '참' : '거짓';

```


### 4. **유용한 배열 메서드**


#### 고차 함수

```javascript

// forEach: 배열의 각 요소에 대해 실행

arr.forEach((value) => console.log(value));


// map: 배열의 각 요소에 대해 함수를 적용한 결과로 새 배열 생성

let newArr = arr.map((value) => value * 2);


// filter: 조건을 만족하는 요소로만 새 배열 생성

let filteredArr = arr.filter((value) => value > 2);


// reduce: 배열을 하나의 값으로 줄임

let sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);

```


### 5. **기타 유용한 기능**


#### 문자열 조작

```javascript

let str = "Hello, World!";


// 문자열 길이

console.log(str.length);


// 문자열 자르기

console.log(str.substring(0, 5));


// 문자열 분할

let arr = str.split(", ");


// 문자열 포함 여부

console.log(str.includes("World"));


// 대소문자 변환

console.log(str.toUpperCase());

console.log(str.toLowerCase());

```


#### 정렬

```javascript

let numbers = [3, 1, 4, 1, 5, 9];

numbers.sort((a, b) => a - b); // 오름차순

numbers.sort((a, b) => b - a); // 내림차순

```


#### Set (중복 없는 값의 집합)

```javascript

let set = new Set([1, 2, 3, 3]);

set.add(4);

set.delete(2);

console.log(set.has(3));

console.log(set.size);

```


#### Map (키-값 쌍의 집합)

```javascript

let map = new Map();

map.set('key1', 'value1');

map.set('key2', 'value2');

console.log(map.get('key1'));

map.delete('key2');

console.log(map.has('key2'));

console.log(map.size);

```


### 6. **비동기 프로그래밍**


#### Promise

```javascript

let promise = new Promise((resolve, reject) => {

  // 비동기 작업 수행

  if (success) resolve(result);

  else reject(error);

});


promise

  .then(result => console.log(result))

  .catch(error => console.log(error));

```


#### Async/Await

```javascript

async function asyncFunction() {

  try {

    let result = await someAsyncFunction();

    console.log(result);

  } catch (error) {

    console.log(error);

  }

}

```


### 7. **배열 조작 및 변환**


#### 배열 슬라이스 (Slice)

```javascript

let arr = [1, 2, 3, 4, 5];

let slicedArr = arr.slice(1, 3); // [2, 3]

// 원본 배열은 변경되지 않음

```


#### 배열 스플라이스 (Splice)

```javascript

let arr = [1, 2, 3, 4, 5];

let splicedArr = arr.splice(1, 2); // [2, 3]

// 원본 배열에서 해당 부분이 제거됨

// arr은 이제 [1, 4, 5]

```


#### 배열 결합 (Concat)

```javascript

let arr1 = [1, 2];

let arr2 = [3, 4];

let mergedArr = arr1.concat(arr2); // [1, 2, 3, 4]

```


#### 배열 찾기 (Find, FindIndex)

```javascript

let arr = [1, 2, 3, 4, 5];

let foundElement = arr.find(element => element > 3); // 4

let foundIndex = arr.findIndex(element => element > 3); // 3

```


#### 배열 포함 여부 검사 (Includes)

```javascript

let arr = [1, 2, 3];

console.log(arr.includes(2)); // true

console.log(arr.includes(4)); // false

```


#### 배열의 모든 요소가 조건을 만족하는지 검사 (Every)

```javascript

let arr = [1, 2, 3];

console.log(arr.every(element => element > 0)); // true

console.log(arr.every(element => element > 2)); // false

```


#### 배열 중 하나라도 조건을 만족하는지 검사 (Some)

```javascript

let arr = [1, 2, 3];

console.log(arr.some(element => element > 2)); // true

console.log(arr.some(element => element > 3)); // false

```


### 8. **문자열 조작**


#### 문자열 검색 (IndexOf, LastIndexOf)

```javascript

let str = "hello world";

console.log(str.indexOf("o")); // 4

console.log(str.lastIndexOf("o")); // 7

```


#### 문자열 대체 (Replace)

```javascript

let str = "hello world";

let newStr = str.replace("world", "JavaScript"); // "hello JavaScript"

```


#### 문자열 양 끝의 공백 제거 (Trim)

```javascript

let str = "   hello world   ";

console.log(str.trim()); // "hello world"

```


#### 부분 문자열 추출 (Substring, Substr)

```javascript

let str = "JavaScript";

console.log(str.substring(1, 4)); // "ava"

console.log(str.substr(1, 4));    // "avaS"

```


### 9. **객체 조작**


#### 객체 키, 값, 엔트리 (Keys, Values, Entries)

```javascript

let obj = { a: 1, b: 2, c: 3 };

console.log(Object.keys(obj));   // ["a", "b", "c"]

console.log(Object.values(obj)); // [1, 2, 3]

console.log(Object.entries(obj));// [["a", 1], ["b", 2], ["c", 3]]

```


#### 객체 복사 (Object Assign, Spread Operator)

```javascript

let obj1 = { a: 1, b: 2 };

let obj2 = { c: 3 };


// Object.assign

let mergedObj = Object.assign({}, obj1, obj2); // { a: 1, b: 2, c: 3 }


// Spread operator

let spreadObj = { ...obj1, ...obj2 }; // { a: 1, b: 2, c: 3 }

```


### 10. **수학 함수**


#### 기본 수학 함수

```javascript

console.log(Math.abs(-7.25)); // 7.25

console.log(Math.ceil(4.2));  // 5

console.log(Math.floor(4.7)); // 4

console.log(Math.round(4.5)); // 5

console.log(Math.max(1, 2, 3)); // 3

console.log(Math.min(1, 2, 3)); // 1

console.log(Math.pow(2, 3));    // 8

console.log(Math.sqrt(16));     // 4

```


#### 랜덤 숫자 생성

```javascript

// 0 이상 1 미만의 부동 소수점 난수

console.log(Math.random()); 


// 1부터 10까지의 정수 난수

console.log(Math.floor(Math.random() * 10) + 1);

```


### 11. **시간 및 날짜**


#### 현재 날짜와 시간

```javascript

let now = new Date();

console.log(now);


// 특정 날짜와 시간

let specificDate = new Date('2020-01-01T00:00:00Z');

console.log(specificDate);


// 날짜 정보 추출

console.log(now.getFullYear());  // 연도

console.log(now.getMonth() + 1); // 월 (0부터 시작하므로 +1)

console.log(now.getDate());      // 일

console.log(now.getHours());     // 시

console.log(now.getMinutes());   // 분

console.log(now.getSeconds());   // 초

```


### 12. **비트 연산자**

JavaScript에서는 비트 연산자를 사용해 비트 단위 조작이 가능합니다.

```javascript

let a = 5; // 0101

let b = 3; // 0011


console.log(a & b); // 1  (AND)

console.log(a | b); // 7  (OR)

console.log(a ^ b); // 6  (XOR)

console.log(~a);    // -6 (NOT)

console.log(a << 1);// 10 (Left shift)

console.log(a >> 1);// 2  (Right shift)

```


### 13. **클래스와 객체지향 프로그래밍**


#### 클래스 선언 및 인스턴스 생성

```javascript

class Person {

  constructor(name, age) {

    this.name = name;

    this.age = age;

  }


  // 메서드 정의

  greet() {

    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);

  }

}


// 인스턴스 생성

const person1 = new Person('John', 30);

person1.greet(); // Hello, my name is John and I am 30 years old.

```


#### 상속과 메서드 오버라이딩

```javascript

class Animal {

  constructor(name) {

    this.name = name;

  }


  speak() {

    console.log(`${this.name} makes a sound.`);

  }

}


class Dog extends Animal {

  speak() {

    console.log(`${this.name} barks.`);

  }

}


const dog = new Dog('Rex');

dog.speak(); // Rex barks.

```


### 14. **모듈화**


#### 모듈 내보내기 (Export)

```javascript

// 변수와 함수를 모듈로 내보내기

export const PI = 3.14;


export function add(x, y) {

  return x + y;

}

```


#### 모듈 가져오기 (Import)

```javascript

// 모듈 가져오기

import { PI, add } from './math.js';


console.log(PI); // 3.14

console.log(add(2, 3)); // 5


// 모든 모듈 가져오기

import * as math from './math.js';


console.log(math.PI); // 3.14

console.log(math.add(2, 3)); // 5

```


### 15. **Error Handling (오류 처리)**


#### try...catch 문

```javascript

try {

  // 오류가 발생할 가능성이 있는 코드

  let result = riskyFunction();

} catch (error) {

  // 오류가 발생했을 때 실행할 코드

  console.error('An error occurred:', error);

} finally {

  // 오류 발생 여부와 관계없이 항상 실행되는 코드

  console.log('Execution completed.');

}

```


#### 사용자 정의 오류

```javascript

class CustomError extends Error {

  constructor(message) {

    super(message);

    this.name = 'CustomError';

  }

}


try {

  throw new CustomError('This is a custom error message.');

} catch (error) {

  console.error(error.name); // CustomError

  console.error(error.message); // This is a custom error message.

}

```


### 16. **비동기 처리 및 AJAX**


#### Fetch API

```javascript

// 데이터 가져오기

fetch('https://api.example.com/data')

  .then(response => response.json())

  .then(data => console.log(data))

  .catch(error => console.error('Error:', error));


// 데이터 보내기

fetch('https://api.example.com/data', {

  method: 'POST',

  headers: {

    'Content-Type': 'application/json',

  },

  body: JSON.stringify({ key: 'value' }),

})

  .then(response => response.json())

  .then(data => console.log(data))

  .catch(error => console.error('Error:', error));

```


### 17. **기타 유용한 함수 및 메서드**


#### SetTimeout과 SetInterval

```javascript

// 일정 시간 후 함수 실행 (1초 후)

setTimeout(() => {

  console.log('This message is delayed by 1 second.');

}, 1000);


// 일정 시간 간격으로 함수 실행 (1초 간격)

const intervalId = setInterval(() => {

  console.log('This message is logged every 1 second.');

}, 1000);


// 타이머 중지

clearInterval(intervalId);

```


#### JSON 처리

```javascript

// 객체를 JSON 문자열로 변환

const obj = { name: 'John', age: 30 };

const jsonString = JSON.stringify(obj);

console.log(jsonString); // '{"name":"John","age":30}'


// JSON 문자열을 객체로 변환

const json = '{"name":"John","age":30}';

const parsedObj = JSON.parse(json);

console.log(parsedObj); // { name: 'John', age: 30 }

```


#### Object Destructuring (객체 구조 분해)

```javascript

const person = { name: 'Alice', age: 25 };

const { name, age } = person;

console.log(name); // Alice

console.log(age); // 25


// 기본값 할당

const { name: firstName, height = 170 } = person;

console.log(firstName); // Alice

console.log(height); // 170 (기본값)

```


#### 배열 구조 분해

```javascript

const arr = [1, 2, 3];

const [first, second, third] = arr;

console.log(first); // 1

console.log(second); // 2

console.log(third); // 3


// 기본값 할당

const [a, b, c = 5] = [10, 20];

console.log(a); // 10

console.log(b); // 20

console.log(c); // 5 (기본값)

```


### 18. **고급 주제 및 추가 기능**


#### 이터레이터와 제너레이터

- **이터레이터(Iterator)**는 `next()` 메서드를 가지고 있어 순차적으로 값을 반환합니다.

- **제너레이터(Generator)** 함수는 이터레이터를 생성하는 함수로, `function*` 문법을 사용합니다.


```javascript

// 제너레이터 함수

function* generatorFunction() {

  yield 1;

  yield 2;

  yield 3;

}


const iterator = generatorFunction();

console.log(iterator.next().value); // 1

console.log(iterator.next().value); // 2

console.log(iterator.next().value); // 3

```


#### 심볼 (Symbols)

- **심볼**은 객체의 고유한 속성 키를 만들 때 사용됩니다.


```javascript

const symbol1 = Symbol('description');

const symbol2 = Symbol('description');


console.log(symbol1 === symbol2); // false


const obj = {

  [symbol1]: 'value'

};


console.log(obj[symbol1]); // 'value'

```


#### 맵 객체 (WeakMap)와 집합 객체 (WeakSet)

- **WeakMap**은 객체를 키로 가지는 맵이며, 가비지 컬렉션의 대상이 됩니다.

- **WeakSet**은 객체를 원소로 가지는 집합이며, 객체가 가비지 컬렉션의 대상이 될 수 있습니다.


```javascript

let obj = { key: 'value' };

const weakMap = new WeakMap();

weakMap.set(obj, 'metadata');


const weakSet = new WeakSet();

weakSet.add(obj);

```


#### Proxy와 Reflect

- **Proxy** 객체는 다른 객체의 기본 작업(속성 접근, 할당 등)을 가로챕니다.

- **Reflect** 객체는 프로퍼티를 다루는 메서드들을 포함하고 있습니다.


```javascript

const target = { message1: 'hello', message2: 'everyone' };


const handler = {

  get: function(obj, prop) {

    return prop in obj ? obj[prop] : 'default';

  }

};


const proxy = new Proxy(target, handler);

console.log(proxy.message1); // 'hello'

console.log(proxy.message3); // 'default'

```


### 19. **기타 고급 주제**


#### ES6+ 최신 기능

- JavaScript ES6(ECMAScript 2015) 이후의 최신 기능들은 코드 작성 시 효율성을 높이고, 복잡한 구조를 간결하게 표현하는 데 유용합니다.


```javascript

// 비구조화 할당 (Destructuring Assignment)

const { prop1, prop2 } = { prop1: 'value1', prop2: 'value2' };

console.log(prop1); // 'value1'


// 나머지 매개변수(Rest Parameter) 및 전개 연산자(Spread Operator)

const numbers = [1, 2, 3];

const newNumbers = [...numbers, 4, 5]; // [1, 2, 3, 4, 5]


function sum(...args) {

  return args.reduce((acc, curr) => acc + curr, 0);

}

console.log(sum(1, 2, 3, 4)); // 10

```


### 20. **비동기 제어 흐름**


#### Promise.all 및 Promise.race

- **Promise.all**은 모든 프라미스가 해결될 때까지 기다리고, 그 결과를 배열로 반환합니다.

- **Promise.race**는 가장 빨리 완료된 프라미스의 결과를 반환합니다.


```javascript

const promise1 = Promise.resolve(3);

const promise2 = new Promise((resolve) => setTimeout(resolve, 100, 'foo'));

const promise3 = 42;


Promise.all([promise1, promise2, promise3]).then(values => {

  console.log(values); // [3, "foo", 42]

});


Promise.race([promise1, promise2, promise3]).then(value => {

  console.log(value); // 3

});

```



### 21. **테스트와 디버깅**


#### 콘솔 메서드

JavaScript는 여러 가지 콘솔 메서드를 제공하여 디버깅을 쉽게 할 수 있습니다.

```javascript

console.log('Log message');    // 일반 로그

console.error('Error message'); // 오류 메시지

console.warn('Warning message'); // 경고 메시지

console.table([{a:1, b:2}, {a:3, b:4}]); // 표 형태로 객체 배열 출력

console.time('timer');         // 타이머 시작

// 코드 실행

console.timeEnd('timer');      // 타이머 종료 및 시간 출력

```


#### 디버깅 도구

- **Debugger**: 디버거에 의해 중단점을 설정합니다.

  ```javascript

  function debugExample() {

    let x = 10;

    debugger; // 이 줄에서 실행이 중단됩니다.

    x += 20;

    return x;

  }

  ```


### 22. **동기화 객체와 멀티스레딩**


#### 웹 워커 (Web Workers)

웹 워커는 웹 애플리케이션이 별도의 스레드에서 스크립트를 실행할 수 있게 해줍니다.

```javascript

// 워커 생성

const worker = new Worker('worker.js');


// 메시지 전송

worker.postMessage('Hello, Worker!');


// 메시지 수신

worker.onmessage = function(event) {

  console.log(event.data);

};


// 워커 종료

worker.terminate();

```


### 23. **DOM 조작 및 이벤트 처리**


#### DOM 선택 및 조작

```javascript

// 요소 선택

const element = document.getElementById('myId');

const elements = document.querySelectorAll('.myClass');


// 속성 조작

element.setAttribute('data-example', 'value');

element.classList.add('new-class');


// 내용 조작

element.textContent = 'Hello World';

element.innerHTML = '<span>New Content</span>';

```


#### 이벤트 처리

```javascript

// 이벤트 리스너 추가

element.addEventListener('click', () => {

  console.log('Element clicked!');

});


// 이벤트 제거

element.removeEventListener('click', handler);


// 이벤트 전파 막기

element.addEventListener('click', (event) => {

  event.stopPropagation(); // 이벤트 전파 막기

  event.preventDefault();  // 기본 동작 방지

});

```


### 24. **고급 객체 조작**


#### 프로토타입 체인과 클래스

```javascript

// 생성자 함수와 프로토타입

function Person(name) {

  this.name = name;

}


Person.prototype.greet = function() {

  console.log(`Hello, my name is ${this.name}`);

};


const alice = new Person('Alice');

alice.greet(); // Hello, my name is Alice


// ES6 클래스와 상속

class Animal {

  constructor(name) {

    this.name = name;

  }


  speak() {

    console.log(`${this.name} makes a noise.`);

  }

}


class Dog extends Animal {

  speak() {

    console.log(`${this.name} barks.`);

  }

}


const dog = new Dog('Rex');

dog.speak(); // Rex barks.

```


#### 객체 프로퍼티 설정자와 접근자

```javascript

const obj = {

  _a: 0,

  get a() {

    return this._a;

  },

  set a(value) {

    if (value > 0) {

      this._a = value;

    }

  }

};


obj.a = 10;  // 설정자 호출

console.log(obj.a); // 접근자 호출, 10

```


### 25. **기타 고급 개념**


#### 타이머 함수

```javascript

// setTimeout: 일정 시간 후에 함수 실행

setTimeout(() => {

  console.log('This message is displayed after 2 seconds');

}, 2000);


// setInterval: 일정 간격으로 함수 실행

const intervalId = setInterval(() => {

  console.log('This message is displayed every 1 second');

}, 1000);


// 타이머 중지

clearInterval(intervalId);

```


#### 이벤트 루프와 비동기 작업

- **이벤트 루프**는 JavaScript의 비동기 동작을 관리하는 메커니즘입니다. 비동기 작업은 이벤트 큐에 추가되고, 이벤트 루프는 이 큐에서 작업을 하나씩 가져와 실행합니다.


### 26. **타입 검사 및 변환**


#### 기본 타입 검사

```javascript

console.log(typeof 'string'); // "string"

console.log(typeof 42);       // "number"

console.log(typeof true);     // "boolean"

console.log(typeof {});       // "object"

console.log(typeof undefined);// "undefined"

console.log(typeof null);     // "object" (특이 케이스)

console.log(Array.isArray([])); // true (배열 여부 검사)

```


#### 명시적 타입 변환

```javascript

// 숫자를 문자열로

let num = 123;

let str = num.toString();


// 문자열을 숫자로

let strNum = '123';

let intNum = parseInt(strNum, 10);

let floatNum = parseFloat(strNum);

```


#### 암시적 타입 변환

```javascript

console.log('5' + 2); // "52" (문자열로 변환)

console.log('5' * 2); // 10  (숫자로 변환)

```



### 27. **패턴과 설계 원칙**


#### 모듈 패턴

- 모듈 패턴은 코드의 전역 네임스페이스 오염을 피하기 위해 클로저를 사용해 코드를 캡슐화하는 패턴입니다.

```javascript

const myModule = (function() {

  let privateVariable = 'private';


  function privateMethod() {

    console.log(privateVariable);

  }


  return {

    publicMethod: function() {

      privateMethod();

    }

  };

})();


myModule.publicMethod(); // "private"

```


#### 싱글턴 패턴

- 싱글턴 패턴은 특정 클래스의 인스턴스가 하나만 존재하도록 보장합니다.

```javascript

const Singleton = (function() {

  let instance;


  function createInstance() {

    return new Object('I am the instance');

  }


  return {

    getInstance: function() {

      if (!instance) {

        instance = createInstance();

      }

      return instance;

    }

  };

})();


const instance1 = Singleton.getInstance();

const instance2 = Singleton.getInstance();


console.log(instance1 === instance2); // true

```


### 28. **고급 타입 변환**


#### 강제 변환 (Coercion)

- JavaScript는 특정 상황에서 자동으로 타입을 변환합니다. 이를 **강제 변환**이라고 합니다.


```javascript

console.log('' == 0);      // true, 빈 문자열은 숫자 0으로 변환

console.log(false == 0);   // true, false는 숫자 0으로 변환

console.log('5' == 5);     // true, 문자열 '5'는 숫자 5로 변환


// 느슨한 비교(==)와 엄격한 비교(===)의 차이

console.log('5' === 5);    // false, 엄격한 비교는 타입 변환하지 않음

```


### 29. **이벤트 루프와 비동기 처리 심화**


#### 마이크로태스크와 매크로태스크

- **마이크로태스크**(Microtask): Promise 콜백, async/await. 이벤트 루프의 각 단계 끝에서 처리됩니다.

- **매크로태스크**(Macrotask): setTimeout, setInterval 등. 이벤트 루프의 매 사이클 시작 시 처리됩니다.


```javascript

console.log('start');


setTimeout(() => {

  console.log('setTimeout');

}, 0);


Promise.resolve().then(() => {

  console.log('promise');

});


console.log('end');


// 출력 순서: start, end, promise, setTimeout

```


### 30. **동적 코드 실행**


#### eval

- `eval` 함수는 문자열로 된 JavaScript 코드를 실행합니다. 보안 문제와 디버깅 어려움 때문에 사용을 피해야 합니다.

```javascript

const code = 'console.log("Dynamic Code Execution")';

eval(code); // "Dynamic Code Execution"

```


### 31. **템플릿 리터럴**


- 템플릿 리터럴을 사용하면 다중 줄 문자열과 표현식 삽입이 가능합니다.

```javascript

const name = 'Alice';

const greeting = `Hello, ${name}!`; // "Hello, Alice!"


const multiLine = `This is a

multiline string.`; // 줄바꿈이 포함된 문자열

```


### 32. **비구조화 할당과 기본값**


- 객체와 배열의 비구조화 할당 시 기본값을 설정할 수 있습니다.

```javascript

const { a = 10, b = 20 } = { a: 5 };

console.log(a); // 5

console.log(b); // 20


const [x = 1, y = 2] = [10];

console.log(x); // 10

console.log(y); // 2

```


### 33. **프록시와 반사**


- 프록시는 객체의 기본 작업(속성 읽기, 쓰기 등)을 가로챌 수 있습니다. 반사는 이 가로챔을 반영합니다.

```javascript

const handler = {

  get: function(target, prop, receiver) {

    if (prop in target) {

      return target[prop];

    } else {

      return `No such property: ${prop}`;

    }

  }

};


const proxy = new Proxy({}, handler);

proxy.a = 1;

console.log(proxy.a); // 1

console.log(proxy.b); // "No such property: b"

```


### 34. **정규 표현식**


- 정규 표현식은 문자열에서 패턴을 검색하거나 추출하는 데 사용됩니다.

```javascript

const regex = /hello/i; // 대소문자 구분 없음

console.log(regex.test('Hello world')); // true


const str = 'The quick brown fox';

const result = str.match(/\b\w{4}\b/g); // 네 글자 단어

console.log(result); // ["quick", "brown"]

```


### 35. **객체의 프로토타입 체인**


- 모든 객체는 프로토타입 객체를 가리키며, 프로토타입 체인을 통해 상속을 구현합니다.

```javascript

function Animal() {}

Animal.prototype.speak = function() {

  console.log('Animal speaks');

};


const dog = new Animal();

dog.speak(); // "Animal speaks"

console.log(dog.__proto__ === Animal.prototype); // true

```















댓글

이 블로그의 인기 게시물

js 스트링에서 요소 갯수 세기

STUDY