所有内置的javascript对象

时间:2016-05-13 16:27:50

标签: javascript

我需要获取所有javascript对象的列表。换句话说,我需要所有这样的x存在的NameOfXObject:

x+""
will return "[object NameOfXObject]"

例如:

document+""         --> "[object HTMLDocument]"
window+""           --> "[object Window]"
locationStorage+""  --> "[object Storage]"

要sumarize: 我需要列表包含:" HTMLDocument"," Window"," Storage" ...

我已经尝试了

Object.keys(window)

但它不会返回所有对象

提前致谢,对不起我的英文

1 个答案:

答案 0 :(得分:0)

您需要使用Object.getOwnPropertyNames遍历window的原型链,以获取附加到其上的所有属性。

var target = window,
    result = [];

do {
    result = result.concat(Object.getOwnPropertyNames(target));
} while(target = Object.getPrototypeOf(target))

result = result
    //Filter out properties such as "onclick" which are null by default
    .filter(function(r){ return window[r] != null; }) 
    //Optional: filter out those whose type is not "object"
    .filter(function(r){ return typeof window[r] === 'object'; }); 

对我来说(此页面中的Chrome v50)将结果过滤为仅包含长度为24的属性名称

["SpeechSynthesisUtterance", "PresentationAvailability", "BeforeInstallPromptEvent", "CanvasRenderingContext2D", "SVGRadialGradientElement", "SVGLinearGradientElement", "SVGFEGaussianBlurElement", "SVGFEDistantLightElement", "SVGAnimatedTransformList"]

但所有这些都是函数而不是对象,因此对于那些x+''会给出更像"function SpeechSynthesisUtterance() { [native code] }"的内容,所以我不确定它是否包含您要查找的内容。< / p>

要获取包含['[object Math]', ...]等字符串表示的列表,请添加

    //Get the string representation of the global object
    .map(function(r){ return window[r] + ''; });

对我来说,其中一个长度为24:'[object SpeechSynthesis]'