如何确定变量是否未定义

6

在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,然后执行上述代码?

4个回答

6
尝试
if (typeof disabledFlag === 'undefined')
    disabledFlag = false;

3

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

就你特定的函数而言,你可以像这样做:

var toggleBlock = function() {
    var disabledFlag = disabledFlag||false;

    if(!disabledFlag){
    //etc.

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

在许多不同的情况下都使用了相同的概念。例如:

情况1 -

var obj = {hello: 'world'};

function fn(object) {
    var object = object || {foo: 'bar'};

    return object;
}

fn(obj)  //  ==> {hello: 'world'}

情景二 -


function fn(object) {
    var object = object || {foo: 'bar'};

    return object;
}

fn(objectThatDoesntExist); //  ==> {foo: 'bar'}

在JavaScript库和模块化项目中,这个概念被广泛地以很多不同的方式使用。

嗯,还是不行,你说的很有道理,所以我不知道为什么这个还是不起作用。 - TEN Design
现在这个神奇地工作了。我猜测是服务器级别的缓存过期了。我们在每个实例中自动生成HTMLC文件,一旦它过期,这个问题就开始解决了。 - TEN Design

1
你不需要使用typeof
if (window.disabledFlag === undefined) window.disabledFlag = false;

加上以下代码: if (disabledFlag === undefined) { var disabledFlag = false; }; 但仍然不起作用。 - TEN Design
不要使用 var。这会使变量局限于它所在的作用域,即 if 块。你需要将其附加到 window。 - citizenslave

0

你可以使用 typeof 关键字来检查一个变量是否未定义,例如:

if(typeof neverDeclared == "undefined") //no errors

if(neverDeclared == null) //throws ReferenceError: neverDeclared is not defined

点击此处获取更多有关typeof的信息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接