首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IE <= 11不喜欢toString.call(价值)

IE <= 11不喜欢toString.call(价值)
EN

Stack Overflow用户
提问于 2014-11-21 03:37:42
回答 1查看 2.3K关注 0票数 2

当我试图逃跑时

代码语言:javascript
复制
function isRegExp(value) { 
  return toString.call(value) === '[object RegExp]'; 
} 

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

首先,我很困惑。该函数与AngularJS函数完全相同,并声称支持IE 9+。如果我假设同一行代码已经测试过,那么当我使用它时,如何导致错误(从而导致调用函数中断)?

第二,我很好奇究竟是什么引起了这个问题。这个值可以是Javascript中的任何内容,而且它似乎只是与我发送给它的一些东西(当只给出一个简单的数组时,它似乎没有中断,但似乎与objects...ect数组的对象数组相斗争)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-21 04:09:33

如果你想做和角完全一样的事情,你应该这样做:

代码语言:javascript
复制
function isRegExp(value) { 
  return Object.prototype.toString.call(value) === '[object RegExp]'; 
} 

请注意定义快捷方式这一段代码toString

示例:

代码语言:javascript
复制
var toString = Object.prototype.toString;
function isRegExp(value) { 
  return toString.call(value) === '[object RegExp]'; 
}
snippet.log(isRegExp(/foo/)); // true
代码语言:javascript
复制
<!-- 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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27053688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档