gpt4 book ai didi

javascript - 在全局上下文中访问 API 类名

转载 作者:行者123 更新时间:2023-12-02 02:21:56 25 4
gpt4 key购买 nike

我正在编写一些 ES/JS 工具。在 DevTools 中我可以看到很多类,例如数组缓冲区。然而,当我尝试从 window 全局上下文中提取此类名称时,我看不到它们。此代码段在 Chrome、FireFox 和 Opera 中给出了类似的结果。

MWE on JSFiddle

console.log('typeof window.ArrayBuffer:', 
typeof window.ArrayBuffer);
console.log("window.hasOwnProperty('ArrayBuffer'):",
window.hasOwnProperty('ArrayBuffer'));

let c = 0;
for (let n in window) {
// console.log(n);
if (n == 'ArrayBuffer') {
console.log('FOUND: ArrayBuffer');
}
c++;
}
console.log(c + ' attributes checked')

如果我取消注释 //console.log(n); 行,我可以看到属性的名称,但看不到任何类。

如何访问这些类 (API) 名称?

最佳答案

这是Object的Enumerable properties的问题.

for in (以及 Object.keys/values/entries)考虑不可枚举属性:

window.hasOwnProperty('ArrayBuffer');       // true
window.propertyIsEnumerable('ArrayBuffer'); // false
// Therefore will not show up in for-in loop

要创建不可枚举的对象属性,示例是使用 Object.defineProperty

const obj = {a: 1, b: 2, c: 3};
for (const prop in obj) console.log(obj[prop]); // 1 2 3

Object.defineProperty(obj, "d", {
value: 4,
// enumerable: false, // defaults to false!!
// set to true to make it enumerable
});

for (const prop in obj) console.log(obj[prop]); // 1 2 3 (no 4 visible)

// Same goes for iterating using Object.keys and Object.values:
console.log(...Object.values(obj)) // 1 2 3 (no 4 visible)

要获取对象的所有属性,您可以使用 Object.getOwnPropertyNames :

const props = Object.getOwnPropertyNames(window);

console.log(props.includes('ArrayBuffer')); // true
console.log(props.some(pr => pr === 'ArrayBuffer')); // true
console.log(props.findIndex(pr => pr === 'ArrayBuffer') > -1); // true

console.log(props.length); // 963
console.log(Reflect.ownKeys(window).length); // 963

// See them all:
console.log(props);

// Loop them all:
// props.forEach(pr => console.log(pr));

请记住,for...in 循环仅可枚举属性 - 符号除外。

要使用符号获取对象自身属性键的数组,请使用 Reflect.ownKeys

The Reflect.ownKeys method returns an array of the target object's own property keys. Its return value is equivalent to Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target))

补充阅读:

关于javascript - 在全局上下文中访问 API 类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66287396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com