专栏名称: 程序员大咖
程序员大咖,努力成就期待着的自己。分享程序员技术文章、程序员工具资源、程序员精选课程、程序员视频教程、程序员热点资讯、程序员学习资料等。
目录
相关文章推荐
山西省人民政府  ·  海报|亚冬会上的“山西能量包”,Buff叠满! ·  3 天前  
阳泉日报  ·  2024年山西经济“成绩单”公布 ·  4 天前  
51好读  ›  专栏  ›  程序员大咖

不会这 10 个 Web API,你还好意思说你是前端开发者?

程序员大咖  · 公众号  ·  · 2025-01-24 10:24

正文

JavaScript中有些API可能使用率比较低,下面我们逐一介绍它们的用法和使用场景。

Blob API

Blob API 用于处理二进制数据,可以方便地将数据转换为Blob对象或从Blob对象读取数据。


// 创建一个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);


使用场景:在Web应用中,可能需要上传或下载二进制文件,使用Blob API可以方便地处理这些数据。

WeakSet

WeakSet 类似于Set,但可以存储弱引用的对象。这意味着,如果没有其他引用指向一个对象,那么这个对象可以被垃圾回收器回收,而不需要手动从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


使用场景:在某些情况下,可能需要存储一些临时的对象,但又不希望这些对象占用太多的内存。使用WeakSet可以方便地管理这些对象。

TextEncoder 和 TextDecoder

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!"


使用场景:在Web应用中,可能需要将字符串转换为二进制数据,或将二进制数据转换为字符串。使用TextEncoder和TextDecoder可以方便地进行这些转换。

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


使用场景:在某些情况下,可能需要拦截对象属性的读取、赋值等操作,以实现更高级的功能。使用Proxy API可以方便地实现这些功能。

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]


使用场景:在某些情况下,可能需要获取对象的可枚举属性或属性值。使用Object.entries()和Object.values()可以方便地实现这些功能。

IntersectionObserver

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);


使用场景:在Web应用中,可能需要实现无限滚动、懒加载等功能,使用IntersectionObserver可以方便地实现这些功能。

Symbol

Symbol 可以用于创建唯一标识符,可以用于定义对象的私有属性或方法。


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"


使用场景:在某些情况下,可能需要定义对象的私有属性或方法,使用Symbol可以方便地实现这些功能。

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!"


使用场景:在某些情况下,可能需要动态调用对象的方法或构造函数,使用Reflect API可以方便地实现这些功能。

Generator API

Generator API 可以用于生成迭代器,可以用于实现异步操作或惰性计算。


function * myGenerator () {
yield "Hello" ;
yield "world" ;
yield "!" ;
}

const myIterator = myGenerator();






请到「今天看啥」查看全文