true
를, 없다면 false
를 반환한다.const number = [1, 2, 3, 4, 5];
number.includes(0); // false
number.includes(1); // true
number.includes(1, 3); // false, number의 3번째 인덱스 이후부터는 1이 없다.
number.includes(5, -2); // true, number의 끝에서 2번째 인덱스 이후에 5가 있음.
Math.pow
메서드를 사용했었다.**
연산자를 통해 지수 연산을 간단하게 수행할 수 있게 되었다.console.log(Math.pow(4, 2)); // 16
console.log(4 ** 2); // 16
targetLength
: 패딩을 채웠을 때 문자열의 목표 길이padString
? : 현재 문자열에 채워넣을 다른 문자열targetLength
: 패딩을 채웠을 때 문자열의 목표 길이padString
? : 현재 문자열에 채워넣을 다른 문자열'Hello'.padStart(10, '1'); // "11111Hello"
'Hello'.padEnd(10, '1'); // "Hello11111"
padEnd()
함수를 활용하자padStart()
함수를 활용하자const strings = ['short', 'medium', 'long', 'very long'];
const longestString = strings.sort((a, b) => b.length - a.length);
// 가장 긴 문자열이 최대 길이이므로, 이를 기준으로 좌측 / 우측 정렬 시행
strings.forEach((str) => console.log(str.padStart(longestString)));
strings.forEach((str) => console.log(str.padEnd(longestString)));
Object.entries
는 객체를 이루는 프로퍼티와 프로퍼티 값을 하나의 엔트리로 묶은 배열을 반환한다.Object.values
는 프로퍼티 값들을 하나의 배열로 묶어 반환한다.const person = {
name: 'baik gwangin',
age: 25,
};
for (const [key, value] of Object.entries(person)) {
console.log(`${key} : ${value}`); // name : baik gwangin, age: 25
}
for (const value of Object.values(person)) {
console.log(value); // baik gwangin, 25
}
Object.getOwnPropertyDescriptors()
메서드가 추가되었다.const person = {
name: 'baik gwangin',
age: 25,
};
/**
* age : {value: 25, writable: true, enumerable: true, configurable: true}
* name : {value: 'baik gwangin', writable: true, enumerable: true, configurable: true}
*/
Object.getOwnPropertyDescriptors(person);
JSON
의 경우 후행 쉼표를 허용하지 않으니 유의해야 한다.const array = [1, 2, 3, , , ,];
console.log(array.length); // 6
const object = {
foo: 'bar',
baz: 'qwerty',
age: 42, // 후행 쉼표를 붙여 속성을 추가할때 오류가 없도록 한다.
};
SharedArrayBuffer 란?
// main.js
const { Workers } = require('worker_threads');
const sharedArrayBuffer = new SharedArrayBuffer(8);
const array = new Int32Array(sharedArrayBuffer);
const worker = new Worker('./Worker.js');
worker.on('message', (data) => {
console.info('data from worker', data);
console.info('main', array);
});
worker.postMessage({ array });
// workers.js
const { parentPort } = require('worker_threads');
parentPort.on('message', (data) => {
const { array } = data;
console.info('data from main', array);
array[0] = 2;
array[1] = 4;
console.info('worker', array);
parentPort.postMessage('ok');
});
// node main.js
/*
data from main Int32Array(2) [ 0, 0 ]
data from worker ok
main Int32Array(2) [ 2, 4 ] (메인 쓰레드 수정됨)
worker Int32Array(2) [ 2, 4 ]
*/
const sharedArrayBuffer = new SharedArrayBuffer(8);
const array = new Int32Array(sharedArrayBuffer);
Atomics.add(array, 0, 5); // array의 0번째 인덱스에 5를 적용
console.info(Atomics.load(array, 0)); // 5