Blob API
Blob API 用于處理二進制資料,可以友善地将資料轉換為Blob對象或從Blob對象讀取資料。
使用場景:在Web應用中,可能需要上傳或下載下傳二進制檔案,使用Blob API可以友善地處理這些資料。
// 建立一個Blob對象
const myBlob = new Blob(["Hello, world!"], { type: "text/plain" });
// 讀取Blob對象的資料
const reader = new FileReader();
reader.addEventListener("loadend", () => {
console.log(reader.result);
});
reader.readAsText(myBlob);
WeakSet
WeakSet 類似于Set,但可以存儲弱引用的對象。這意味着,如果沒有其他引用指向一個對象,那麼這個對象可以被垃圾回收器回收,而不需要手動從WeakSet中删除。
使用場景:在某些情況下,可能需要存儲一些臨時的對象,但又不希望這些對象占用太多的記憶體。使用WeakSet可以友善地管理這些對象。
const myWeakSet = new WeakSet();
const obj1 = {};
const obj2 = {};
myWeakSet.add(obj1);
myWeakSet.add(obj2);
console.log(myWeakSet.has(obj1)); // true
obj1 = null;
console.log(myWeakSet.has(obj1)); // false
TextEncoder 和 TextDecoder
TextEncoder 和 TextDecoder 用于處理字元串和位元組序列之間的轉換。它們可以友善地将字元串編碼為位元組序列或将位元組序列解碼為字元串。
使用場景:在Web應用中,可能需要将字元串轉換為二進制資料,或将二進制資料轉換為字元串。使用TextEncoder和TextDecoder可以友善地進行這些轉換。
const encoder = new TextEncoder();
const decoder = new TextDecoder();
const myString = "Hello, world!";
const myBuffer = encoder.encode(myString);
console.log(myBuffer); // Uint8Array(13) [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33]
const decodedString = decoder.decode(myBuffer);
console.log(decodedString); // "Hello, world!"
Proxy API
Proxy API 可以用于建立代理對象,可以攔截對象屬性的讀取、指派等操作。這個功能可以用于實作元程式設計、資料劫持等功能。
使用場景:在某些情況下,可能需要攔截對象屬性的讀取、指派等操作,以實作更進階的功能。使用Proxy API可以友善地實作這些功能。
const myObject = {
name: "John",
age: 30,
};
const myProxy = new Proxy(myObject, {
get(target, property) {
console.log(`Getting property ${property}`);
return target[property];
},
set(target, property, value) {
console.log(`Setting property ${property} to ${value}`);
target[property] = value;
},
});
console.log(myProxy.name); // "John"
myProxy.age = 31; // Setting property age to 31
Object.entries() 和 Object.values()
Object.entries() 用于擷取對象的可枚舉屬性和值的數組,Object.values() 用于擷取對象的可枚舉屬性值的數組。
使用場景:在某些情況下,可能需要擷取對象的可枚舉屬性或屬性值。使用Object.entries()和Object.values()可以友善地實作這些功能。
const myObject = {
name: "John",
age: 30,
};
console.log(Object.entries(myObject)); // [["name", "John"], ["age", 30]]
console.log(Object.values(myObject)); // ["John", 30]
IntersectionObserver
IntersectionObserver 可以用于檢測元素是否進入視口,可以用于實作無限滾動、懶加載等功能。
使用場景:在Web應用中,可能需要實作無限滾動、懶加載等功能,使用IntersectionObserver可以友善地實作這些功能
const myObserver = new IntersectionObserver((entries, observer) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
console.log(`${entry.target.id} is now visible`);
observer.unobserve(entry.target);
}
});
});
const myElement = document.getElementById("myElement");
myObserver.observe(myElement);
Symbol
Symbol 可以用于建立唯一辨別符,可以用于定義對象的私有屬性或方法。
使用場景:在某些情況下,可能需要定義對象的私有屬性或方法,使用Symbol可以友善地實作這些功能。
javascriptCopy code
const mySymbol = Symbol("mySymbol");
const myObject = {
[mySymbol]: "This is a private property",
publicProperty: "This is a public property",
};
console.log(myObject[mySymbol]); // "This is a private property"
console.log(myObject.publicProperty); // "This is a public property"
Reflect API
Reflect API 可以用于實作元程式設計,例如動态調用對象的方法或構造函數。
使用場景:在某些情況下,可能需要動态調用對象的方法或構造函數,使用Reflect API可以友善地實作這些功能。
class MyClass {
constructor(value) {
this.value = value;
}
getValue() {
return this.value;
}
}
const myObject = Reflect.construct(MyClass, ["Hello, world!"]);
const myMethod = Reflect.get(myObject, "getValue");
const myValue = myMethod.call(myObject);
console.log(myValue); // "Hello, world!"
Generator API
Generator API 可以用于生成疊代器,可以用于實作異步操作或惰性計算。
使用場景:在某些情況下,可能需要實作異步操作或惰性計算,使用Generator API可以友善地實作這些功能。
function* myGenerator() {
yield "Hello";
yield "world";
yield "!";
}
const myIterator = myGenerator();
console.log(myIterator.next().value); // "Hello"
console.log(myIterator.next().value); // "world"
console.log(myIterator.next().value); // "!"
Web Workers
Web Workers 可以用于在背景線程中執行JavaScript代碼,可以用于提高性能或實作複雜的計算。
使用場景:在Web應用中,可能需要處理大量計算密集型任務或執行長時間運作的操作,使用Web Workers可以提高性能或避免阻塞使用者界面。
// main.js
const myWorker = new Worker("worker.js");
myWorker.postMessage("Hello, worker!");
myWorker.onmessage = (event) => {
console.log(`Message received from worker: ${event.data}`);
};
// worker.js
onmessage = (event) => {
console.log(`Message received in worker: ${event.data}`);
postMessage("Hello, main!");
};
AudioContext
AudioContext 可以用于處理音頻,可以用于實作音頻播放、音效處理等功能。
使用場景:在Web應用中,可能需要實作音頻播放、音效處理等功能,使用AudioContext可以友善地實作這些功能。
const audioContext = new AudioContext();
fetch("https://example.com/audio.mp3")
.then((response) => response.arrayBuffer())
.then((arrayBuffer) => audioContext.decodeAudioData(arrayBuffer))
.then((audioBuffer) => {
const source = audioContext.createBufferSource();
source.buffer = audioBuffer;
source.connect(audioContext.destination);
source.start();
});