gpt4 book ai didi

javascript - IE <= 11 不喜欢 toString.call(value)

转载 作者:行者123 更新时间:2023-11-30 08:01:27 25 4
gpt4 key购买 nike

当我尝试运行时

function isRegExp(value) { 
return toString.call(value) === '[object RegExp]';
}

在 IE <= 11(在 11 和 9 上试过),我得到一个 TypeError: Invalid calling object。此代码适用于较新版本以及其他浏览器。

首先,我很困惑。此函数与 AngularJS function 相同,并且 Angular 声称支持 IE 9+。当我假设他们已经测试过同一行代码时,当我使用它时,怎么会导致错误(并因此导致我的调用函数中断)?

其次,我很好奇到底是什么导致了这个问题。这个值可以是 Javascript 中的任何值,它似乎只破坏了我发送它的一些东西(当只给一个简单的数组时它似乎没有破坏,但似乎与对象数组的对象数组斗争...等等)

最佳答案

如果你想做与 Angular 正在做的完全相同的事情,你应该这样做:

function isRegExp(value) { 
return Object.prototype.toString.call(value) === '[object RegExp]';
}

公告this section of code定义快捷方式 toString

例子:

var toString = Object.prototype.toString;
function isRegExp(value) {
return toString.call(value) === '[object RegExp]';
}
snippet.log(isRegExp(/foo/)); // true
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

这样做的原因 toString 而不是 instanceof 或类似的是 Object.prototype.toString 的行为非常好-定义in the spec ,并且即使您正在测试的 RegExp 对象来自另一个窗口,此技术也有效,而在这种情况下使用 instanceof 无效。这是一个示例:http://jsbin.com/sehivi

关于javascript - IE <= 11 不喜欢 toString.call(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27053688/

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