2

什么会导致 IE7 中出现这种行为?我无法在 jsfiddle 上重现此问题...

var func=new Function('arg','return 2*2;');
alert(typeof func);

返回对象。

我完全糊涂了。

如何调试这个问题?如何弄清楚为什么 new Function 返回一个对象?

更新

不应该是这样吧?或者我只是不明白什么?对我来说,它看起来像 Windows 8 错误。

https://www.dropbox.com/s/mhyuab3mhj2yu59/ie7_windows8_bug.png

更新

这取决于 IE8,在 IE9 中它消失了。

4

3 回答 3

1

我无法在我的机器上复制它,你的权利 - 这是错误的。根据EMCA 规范,任何callable应该返回function给操作员的东西。面对这个问题,如果你想测试给定变量是否是一个函数,你可以使用:typeof

function isFunction(func){
    return  typeof func === 'function' ||
           (typeof func === 'object' && func instanceof Function); 
}
于 2012-05-22T09:55:10.890 回答
0

通过此解决方案解决的问题:

var func=eval('(function(){return function(){ your code here }})()');
于 2012-05-30T15:49:39.763 回答
0

扩展Mark Rhodes 的答案

function realType( t ) {
    return Object.prototype.toString.call(t).slice(8, -1);
};

var func=new Function('arg','return 2*2;');

alert( realType(func) ); // Function/Object
alert( realType([]) ); // Array
alert( typeof [] ) // object

alert( realType(new Date) ); // Date
alert( typeof (new Date) ); // object
于 2012-05-22T10:11:16.873 回答