1. 字符串的扩展方法
1.1 includes()
const str = 'Hello World';
console.log(str.includes('Hello'));
console.log(str.includes('hello'));
console.log(str.includes('World', 6));
function validateEmail(email) {
return email.includes('@') && email.includes('.');
}
1.2 startsWith()
const url = 'https://example.com';
console.log(url.startsWith('https'));
console.log(url.startsWith('http'));
console.log(url.startsWith('example', 8));
function isSecureUrl(url) {
return url.startsWith('https://');
}
1.3 endsWith()
const filename = 'document.pdf';
console.log(filename.endsWith('.pdf'));
console.log(filename.endsWith('.doc'));
console.log(filename.endsWith('ment', 8));
function isImageFile(filename) {
return filename.endsWith('.jpg') || filename.endsWith('.png');
}
1.4 repeat()
const star = '*';
console.log(star.repeat(5));
function createIndent(level) {
return ' '.repeat(level * 2);
}
function createProgressBar(progress) {
const filled = '█'.repeat(progress);
const empty = '░'.repeat(10 - progress);
return filled + empty;
}
console.log(createProgressBar(3));
2. 数值的扩展
2.1 进制表示法
const binary = 0b1010;
console.log(binary);
const octal = 0o744;
console.log(octal);
const permission = 0b111;
const canRead = (permission & 0b100) === 0b100;
const canWrite = (permission & 0b010) === 0b010;
const canExecute = (permission & 0b001) === 0b001;
2.2 Number 新增方法
2.2.1 Number.isFinite()
console.log(Number.isFinite(1));
console.log(Number.isFinite(Infinity));
console.log(Number.isFinite(-Infinity));
console.log(Number.isFinite(NaN));
console.log(Number.isFinite('15'));
function validateInput(value) {
return Number.isFinite(value) ? value : 0;
}
2.2.2 Number.isNaN()
console.log(Number.isNaN(NaN));
console.log(Number.isNaN(1));
console.log(Number.isNaN('NaN'));
function safeCalculation(x, y) {
const result = x / y;
return Number.isNaN(result) ? 0 : result;
}
2.2.3 Number.isInteger()
console.log(Number.isInteger(1));
console.log(Number.isInteger(1.0));
console.log(Number.isInteger(1.1));
function validateAge(age) {
return Number.isInteger(age) && age >= 0;
}
2.2.4 Number.EPSILON
console.log(Number.EPSILON);
function nearlyEqual(a, b) {
return Math.abs(a - b) < Number.EPSILON;
}
console.log(nearlyEqual(0.1 + 0.2, 0.3));
2.3 Math 新增方法
2.3.1 Math.trunc() 去除小数部分,不管大小直接抹掉小数部分
console.log(Math.trunc(4.9));
console.log(Math.trunc(-4.1));
console.log(Math.trunc(-0.1234));
function getHours(hours) {
return Math.trunc(hours);
}
2.3.2 Math.sign()
console.log(Math.sign(5));
console.log(Math.sign(-5));
console.log(Math.sign(0));
console.log(Math.sign(-0));
console.log(Math.sign(NaN));
function getTemperatureStatus(temp) {
switch (Math.sign(temp)) {
case 1: return '温度高于零度';
case -1: return '温度低于零度';
case 0: return '温度为零度';
default: return '无效温度';
}
}
3. 数组的扩展
3.1 扩展运算符
const original = [1, 2, 3];
const copy = [...original];
console.log(copy);
const arr1 = [1, 2];
const arr2 = [3, 4];
const combined = [...arr1, ...arr2];
console.log(combined);
const [first, ...rest] = [1, 2, 3, 4];
console.log(first);
console.log(rest);
function sum(...numbers) {
return numbers.reduce((total, num) => total + num, 0);
}
console.log(sum(1, 2, 3));
3.2 Array.from()
const arrayLike = { 0: 'a', 1: 'b', 2: 'c', length: 3 };
const array = Array.from(arrayLike);
console.log(array);
const set = new Set([1, 2, 3]);
const arrayFromSet = Array.from(set);
console.log(arrayFromSet);
const mapped = Array.from([1, 2, 3], x => x * 2);
console.log(mapped);
const links = Array.from(document.querySelectorAll('a'));
const urls = links.map(link => link.href);
3.3 Array.of()
console.log(Array.of(1));
console.log(Array.of(1, 2, 3));
console.log(Array.of(undefined));
console.log(new Array(3));
console.log(Array.of(3));
function createMatrix(rows, cols, value) {
return Array.from({ length: rows }, () => Array.of(...Array(cols).fill(value)));
}
console.log(createMatrix(2, 2, 0));
3.4 查找方法
3.4.1 find() 和 findIndex()
const numbers = [1, 2, 3, 4, 5];
const found = numbers.find(num => num > 3);
console.log(found);
const foundIndex = numbers.findIndex(num => num > 3);
console.log(foundIndex);
const users = [
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' }
];
const user = users.find(user => user.id === 2);
console.log(user);
3.4.2 findLast() 和 findLastIndex() 扁平化数组
const numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
const lastFound = numbers.findLast(num => num > 3);
console.log(lastFound);
const lastFoundIndex = numbers.findLastIndex(num => num > 3);
console.log(lastFoundIndex);
const transactions = [
{ id: 1, amount: 100 },
{ id: 2, amount: 200 },
{ id: 3, amount: 300 }
];
const lastLargeTransaction = transactions.findLast(t => t.amount > 150);
console.log(lastLargeTransaction);
3.5 fill()
const array = new Array(3).fill(0);
console.log(array);
const numbers = [1, 2, 3, 4, 5];
numbers.fill(0, 2, 4);
console.log(numbers);
function createMatrix(rows, cols) {
return Array(rows).fill().map(() => Array(cols).fill(0));
}
console.log(createMatrix(2, 3));
3.6 flat() 和 flatMap()
const nested = [1, [2, 3], [4, [5, 6]]];
console.log(nested.flat());
console.log(nested.flat(2));
const sentences = ['Hello world', 'Good morning'];
const words = sentences.flatMap(s => s.split(' '));
console.log(words);
const orders = [
{ products: ['apple', 'banana'] },
{ products: ['orange'] }
];
const allProducts = orders.flatMap(order => order.products);
console.log(allProducts);