Zam*_*ezi 1 javascript internet-explorer angularjs
当我试图跑
function isRegExp(value) {
return toString.call(value) === '[object RegExp]';
}
Run Code Online (Sandbox Code Playgroud)
在IE <= 11(尝试11和9),我得到了一个TypeError: Invalid calling object.此代码适用于较新版本以及其他浏览器.
首先,我很困惑.此函数与AngularJS函数相同,Angular声称支持IE 9+.当我使用它时,相同的代码行如何导致错误(从而导致我的调用函数中断),当我假设他们已经测试过它时?
其次,我很好奇究竟是什么导致了这个问题.这个值可以是Javascript中的任何东西,它似乎只是打破了我发送的一些东西(当给出一个简单的数组时它似乎没有破坏,但似乎很难对象的数组对象的数组...等.)
如果你想做与Angular完全相同的事情你应该像这样做:
function isRegExp(value) {
return Object.prototype.toString.call(value) === '[object RegExp]';
}
Run Code Online (Sandbox Code Playgroud)
请注意定义快捷方式的此部分代码toString.
例:
var toString = Object.prototype.toString;
function isRegExp(value) {
return toString.call(value) === '[object RegExp]';
}
snippet.log(isRegExp(/foo/)); // trueRun Code Online (Sandbox Code Playgroud)
<!-- 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>Run Code Online (Sandbox Code Playgroud)
做这toString件事而不是instanceof或类似的原因Object.prototype.toString是在规范中非常明确地定义了行为,并且这种技术即使在RegExp你正在测试的对象来自另一个窗口时instanceof也能工作,而在这种情况下使用不起作用.这是一个示例:http://jsbin.com/sehivi
| 归档时间: |
|
| 查看次数: |
1767 次 |
| 最近记录: |