Javascript “咕噜咕噜”的丑陋处理字符串;“未定义”;作为未定义的关键字

Javascript “咕噜咕噜”的丑陋处理字符串;“未定义”;作为未定义的关键字,javascript,gruntjs,grunt-contrib-uglify,Javascript,Gruntjs,Grunt Contrib Uglify,我正在对现有的Angular SPA进行更改,该SPA有时会在应用程序的产品浏览器中查看。应用程序在window.external.Handle上公开了几个函数,以允许页面与应用程序中的某些功能交互,或从应用程序中获取详细信息(考虑应用程序版本、许可证详细信息等) 我有以下代码(在另一个不使用grunt contrib uglify的站点上工作): 如果我grunt在本地提供文件,页面将按预期工作。当我为dist或UAT构建(两者都包括丑陋任务)提供服务时,调用上述函数的站点区域无法正确呈现 我

我正在对现有的Angular SPA进行更改,该SPA有时会在应用程序的产品浏览器中查看。应用程序在window.external.Handle上公开了几个函数,以允许页面与应用程序中的某些功能交互,或从应用程序中获取详细信息(考虑应用程序版本、许可证详细信息等)

我有以下代码(在另一个不使用grunt contrib uglify的站点上工作):

如果我
grunt在本地提供文件,页面将按预期工作。当我为dist或UAT构建(两者都包括丑陋任务)提供服务时,调用上述函数的站点区域无法正确呈现

我已经追踪到以下丑陋的版本:

function e(e,t){return{isInProduct:function(){return void 0!==window.external&&void 0!==typeof window.external&&void 0!==window.external.Handle&&void 0!==typeof window.external.Handle}
更改
“无效0==窗口。外部“
”无效0==window.external.Handle“
到”
“未定义”==窗口类型。外部“
”和“
”未定义”==typeof window.external.Handle'
分别解决了该问题,并且页面在所有实例中都能正确呈现


我可以理解为什么uglify试图以这种方式简化代码,但我认为这样做是不正确的-它不会在输出中将字符串“未定义”视为字符串(应用程序有一些怪癖,会返回字符串而不是关键字/布尔值),从而破坏代码。如何防止它这样做?

在做了更多的研究之后,我发现,这提供了一种更简洁的方法来检查产品内功能的存在

使用建议的检查不仅导致代码更干净,而且没有问题。针对我的问题,代码如下:

function isIsProduct() {
    return ('Handle' in window.external);
}

在做了更多的研究之后,我发现,这提供了一种更简洁的方法来检查产品中功能的存在

使用建议的检查不仅导致代码更干净,而且没有问题。针对我的问题,代码如下:

function isIsProduct() {
    return ('Handle' in window.external);
}

typeof window.external!==未定义的
总是正确的,因为typeof只返回字符串。@RolandStarke我理解这一部分,但让我困惑的是,为什么当被定义为
无效0时它会断开==window.external
。我在函数中指定希望它检查
typeof window.external
typeof window.external!==未定义的
总是正确的,因为typeof只返回字符串。@RolandStarke我理解这一部分,但让我困惑的是,为什么当被定义为
无效0时它会断开==window.external
。我在函数中指定希望它检查
typeof window.external