【问题标题】:how to determine if variable is undefined [duplicate]如何确定变量是否未定义[重复]
【发布时间】:2014-03-15 08:34:54
【问题描述】:

在另一个关于 SO 的问题中,我正在确定如何关闭一个功能,而有效的解决方案是:

我将var disabledFlag = true; 放在页面的头部,在调用 shell.js 之前,然后在 shell.js 中我有:

/*******************************/
/*  TOGGLE BUTTON
/*******************************/
var toggleBlock = function() {
    console.log(disabledFlag);
    if(!disabledFlag){
      var windowsize = $(window).width(),
      isDesktop = windowsize > 765;
      $("#quicksearch").toggleClass("collapse in", isDesktop);
      $("#quicksearch").toggleClass("collapse out", !isDesktop);
      $("#sidebar").toggleClass("collapse in", isDesktop);
      $("#sidebar").toggleClass("collapse out", !isDesktop);
    }
    else {
      $("#quicksearch").addClass("collapse out");
      $("#sidebar").addClass("collapse out");  
    }
}
$(document).ready(toggleBlock);
$(window).on("resize.showContent", toggleBlock);
toggleBlock();

shell.js 是一个与其他站点共享的通用文件,可能没有定义变量。如何检查变量是否已定义,如果没有将其赋值为false,然后执行上面的代码?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    你不需要typeof

    if (window.disabledFlag === undefined) window.disabledFlag = false;
    

    【讨论】:

    • 添加了 if (disabledFlag === undefined) { var disabledFlag = false; };仍然无法正常工作
    • 不要使用var。这使得变量在它所在的范围内是局部的,即 if 块。您希望它附加到窗口。
    【解决方案2】:

    有比使用三元组或if else 语句更简单的方法。

    就您的具体功能而言,您可以执行以下操作:

    var toggleBlock = function() {
        var disabledFlag = disabledFlag||false;
    
        if(!disabledFlag){
        //etc.
    

    undefined 是假的,因此它与逻辑 || 运算符一起使用。 || 运算符使新的var disabledFlag 设置为disabledFlag(如果存在),如果不存在,它将设置varfalse

    在许多不同的上下文中都使用了相同的概念。例如:

    情况 1 -

    var obj = {hello: 'world'};
    
    function fn(object) {
        var object = object || {foo: 'bar'};
    
        return object;
    }
    
    fn(obj)  //  ==> {hello: 'world'}
    

    情况 2 -

    function fn(object) {
        var object = object || {foo: 'bar'};
    
        return object;
    }
    
    fn(objectThatDoesntExist); //  ==> {foo: 'bar'}
    

    在 JavaScript 库和模块模式项目中,这个概念以许多不同的方式经常使用。

    【讨论】:

    • mehhh 还是不行,你说的很有道理,所以我不知道为什么这行不通
    • 现在神奇地工作了。我假设服务器级缓存已过期。我们会在每个实例中自动生成 htmlc 文件,一旦过期,它就会开始工作。
    【解决方案3】:

    您可以使用typeof 关键字检查变量是否未定义,如下所示:

    if(typeof neverDeclared == "undefined") //no errors
    
    if(neverDeclared == null) //throws ReferenceError: neverDeclared is not defined
    

    查看here 以获取有关typeof 的更多信息

    【讨论】:

      【解决方案4】:

      试试

      if (typeof disabledFlag === 'undefined')
          disabledFlag = false;
      

      【讨论】:

        猜你喜欢
        • 2010-12-01
        • 2018-05-26
        • 2011-02-08
        • 2012-04-28
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多