当我试图逃跑时
function isRegExp(value) {
return toString.call(value) === '[object RegExp]';
} 在IE <= 11 (尝试11和9)中,我得到了一个TypeError: Invalid calling object。此代码适用于较新的版本以及其他浏览器。
首先,我很困惑。该函数与AngularJS函数完全相同,并声称支持IE 9+。如果我假设同一行代码已经测试过,那么当我使用它时,如何导致错误(从而导致调用函数中断)?
第二,我很好奇究竟是什么引起了这个问题。这个值可以是Javascript中的任何内容,而且它似乎只是与我发送给它的一些东西(当只给出一个简单的数组时,它似乎没有中断,但似乎与objects...ect数组的对象数组相斗争)。
发布于 2014-11-21 04:09:33
如果你想做和角完全一样的事情,你应该这样做:
function isRegExp(value) {
return Object.prototype.toString.call(value) === '[object RegExp]';
} 请注意定义快捷方式这一段代码的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的行为是非常明确的在规范中,而且即使您正在测试的RegExp对象来自另一个窗口,这种技术也能工作,而在这种情况下使用instanceof不起作用。这里有一个例子说明了这一点:http://jsbin.com/sehivi
https://stackoverflow.com/questions/27053688
复制相似问题