Javascript (0 && 1)

Javascript (0 && 1)

本文关键字:amp Javascript      更新时间:2023-09-26

我正在尝试调试一些与Dojo本地化相关的JavaScript代码,并且我在Dojo中遇到以下代码:

isXd = function(mid, contextRequire){
    return ( 0  &&  1 ) ?
        contextRequire.isXdUrl(require.toUrl(mid + ".js")) :
    true;
},

这里三元操作符的目的是什么?在我看来,(0 && 1)总是false,这个函数总是返回true。这是浏览器兼容性的问题吗?

我找到的源代码与您的代码略有不同,但解释应该合适。

原始代码可以在i18n.js中找到,它是完整源代码包的一部分:

isXd = function(mid, contextRequire){
    return (has("dojo-sync-loader") && has("dojo-v1x-i18n-Api")) ?
        contextRequire.isXdUrl(require.toUrl(mid + ".js")) :
        true;
},

i18n.js.uncompressed.js包含在发布包中的相同部分如下所示:

isXd = function(mid, contextRequire){
    return ( 1  &&  1 ) ?
        contextRequire.isXdUrl(require.toUrl(mid + ".js")) :
        true;
},

当您查看 Dojo Loader部分"选项/功能"时,您将看到dojo-sync-loader具有默认值true

文档说明:

第一列是在加载器中定义的Option/Feature,第二个选项是这是否是一个检测到的特性(通过has.add()),或者如果它只是一个选项及其默认值,则是。使用"未构建"源代码,所有的功能和选项都是可用的。如果加载器已经构建,那么其中一些特性可能已经被设置为staticHasFeatures,并且不再是可配置的。

由于dojo-sync-loader是一个不可检测的特性,因此可能会在构建的源代码中替换它。