IE8 Javascript null!=未定义

IE8 Javascript null!=未定义,javascript,jquery,ajax,internet-explorer-8,jsonp,Javascript,Jquery,Ajax,Internet Explorer 8,Jsonp,我已经确定了问题,但不确定是什么导致了问题。我的生产环境正在处理undefined和null,undefined==null是所需的行为。问题发生在IE8中,对于我的开发环境,它以不同的方式处理null和undefined未定义!=空 我在下面提供了一段代码,这段代码在两种环境中都是相同的。调用render函数时,不会为两种环境传递任何参数。我添加了控制台语句,以显示每个环境如何处理传递到呈现函数中的参数 var PortalView = (function() { return ne

我已经确定了问题,但不确定是什么导致了问题。我的生产环境正在处理undefined和null,undefined==null是所需的行为。问题发生在IE8中,对于我的开发环境,它以不同的方式处理null和undefined未定义!=空

我在下面提供了一段代码,这段代码在两种环境中都是相同的。调用render函数时,不会为两种环境传递任何参数。我添加了控制台语句,以显示每个环境如何处理传递到呈现函数中的参数

var PortalView = (function() {

    return new function() {
    $.extend(true, this, SystemController);

        var self = this;

        //Render: 'args' is not defined in this case causing the issue
        self.render = function(args){
            if (args == null){                     console.dir('null!!');}
            if (args == undefined){                console.dir('undefined!!');}
            if (args != undefined && args != null){console.dir('NEITHER');}
            if (args == null && args == undefined){console.dir('BOTH!!');}
            console.dir('args:'+args);      

            var args = (args != undefined) ? args : {};

            args.el = (args.el != undefined) ? args.el : '#content';  //ERROR OCCURS HERE (line 21)
            args.template = "PortalTemplate"; //HTML template
            self.renderTemplate(args);        //inherited from 'SystemController'
        };
    }
})();
以下是控制台结果:

Production Environment (desired results):
   LOG: "null!!" 
   LOG: "undefined!!" 
   LOG: "BOTH!!" 
   LOG: "args:undefined" 

Development Environment (undesired results)
   LOG: "null!!" 
   LOG: "args:undefined" 
   SCRIPT5007: Unable to get value of the property 'el': object is null or undefined 
   vwaPortalView.js, line 21 character 4
我正在寻找可能导致此类错误发生的场景。任何提示都将不胜感激

编辑 我已经查明了问题的真正根源。这是由jqueryajax请求提供身份验证服务的跨站点内部intranet站点引起的。jsonpCallback参数是破坏一切的因素。如果有人知道任何能帮我省事的事。。。太好了,否则我想从现在起我应该能应付得了!我在IE8中提供了ajax调用作为问题根源的参考

        $.ajax({
                url: 'http://xyz.aspx', //changed for obvious reasons
                dataType: 'jsonp',
                jsonp: 'callback',
                error: function (request, status, error) {console.dir(error);}, //Parse error
                jsonpCallback: function(data, status){
                    console.dir(data);
                    console.dir(status);
                }
            });
使用类型

var args = (typeof args === "undefined") ? {} : args;

typeof在所有浏览器中都受支持,并将返回元素的文本类型或“未定义”。

@BenjaminGruenbaum如果松散比较失败,严格比较将如何解决它?很可能您的开发环境被认为是内部网站,因为IE最了解它!并在兼容模式IE7模式下运行。有一个元标记可以解决这个问题。@NiettheDarkAbsol你完全正确。我第一次没把问题读对。严格的比较肯定不能解决这个问题。Erica,应该避免跨站点脚本编写到另一个站点,这会带来安全风险;另外,您所在的地区不再支持IE8,请尝试Chrome;args===void 0在我看来更短,反射性更小。@BenjaminGruenbaum当谈到旧版本的ie时,我发现有些方法比其他方法更可靠。typeof是一种更安全的检查,它不会抛出任何错误,也更容易阅读。这是错误的。您应该检查JavaScript中未声明变量和未定义变量之间的差异undefined不会为未定义的变量抛出,但只会为未声明的变量抛出,或者,如果您使用抛出getter执行了一些非常愚蠢的操作,比如defineProperty