gpt4 book ai didi

javascript - "[object Function]"是内置函数独有的吗?

转载 作者:行者123 更新时间:2023-11-29 10:19:32 25 4
gpt4 key购买 nike

我正在尝试编写一个只将非内置全局变量转储到控制台的小书签。我发现 window.Audio 和其他一些内置函数必须 toString() 返回“[object Function]”。

是否有可能构建其 .toString() 返回“[object Function]”而不覆盖 .toString() 的函数(这有意义吗?)换句话说,我是否有可能跳过非内置函数,因为我跳过“[object Functions]”的 ?

这个问题是我试图完善我的书签的一部分:https://gist.github.com/4635185

最佳答案

因为window.AudioObject
有不同的toString 方法(Audio.toString === Object.toString//false)
,任何其他 functionObjecttoString 方法可能会被覆盖并可能返回 [object Function]

现在,人们不会四处奔波并覆盖他们的函数 toString 方法。所以您可能会非常适合这种方法。但可能出于调试原因或其他原因,有人可能会决定这样做。

更新:

一个简单的 ECMAScript 5 解决方案也是可能的 ( Compatibility )

(function () {
var keys = Object.keys(window),
r = {};
for (var i = 0, j; j = keys[i]; i++) {
r[j] = window[j];
}
console.dir(r);
})();

编辑:

谢天谢地,正如您所指出的最后一个答案不正确(我什至不知道我在想什么)

无论如何,另一种方法可能是

  • 创建一个新的空 iframe(about:blank)
  • 获取所有window属性从头开始包含的属性
  • 将所有其他的插入一个数组

Example

function getNonNatives(window) {
var iframe = document.createElement("iframe");
iframe.src = "about:blank";
document.body.appendChild(iframe);
var natives = iframe.contentWindow,nonnatives = {};
for(var prop in window)
if(!natives[prop] && window[prop] !== null)
nonnatives[prop] = window[prop];
document.body.removeChild(iframe);
return nonnatives;
};
console.log(getNonNatives(window));

这样,如果有人会覆盖对象/函数 toString 方法,您就不必再费心了。

为了可读性,我不会在此编辑中包含旧代码

评论

回答评论中的问题 !!~ 做了什么:

~ 是一个按位非运算符,它反转其操作数的位。

鉴于此逻辑,它可以用作 indexOf 的简写来检查它是否找到任何东西,
因为它返回 -1 如果没有找到其他正数。

~-1 == 0 和例如 ~4 == -5

然后用!!把它转成 bool 值

!!0 == false!!-5 == true

基本上是

的简写

if( myString.indexOf("myValue") > -1)

关于javascript - "[object Function]"是内置函数独有的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14585537/

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