如何确定变量是不是未定义[重复]

Posted

技术标签:

【中文标题】如何确定变量是不是未定义[重复]【英文标题】: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,然后执行上面的代码?

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于如何确定变量是不是未定义[重复]的主要内容,如果未能解决你的问题,请参考以下文章

变量是不是未定义[重复]

在 JavaScript [重复] 中引用未定义变量时如何避免错误

如何确定变量是“未定义”还是“空”?

使用jquery发布变量时如何修复“未定义索引”[重复]

未定义变量时计算css高度[重复]

在 Jinja2 中,如何测试变量是不是未定义?