如何确定变量是否未定义

时间:2014-02-16 00:09:42

标签: javascript jquery

在关于SO的另一个问题中,我正在确定如何切换一个函数,工作解决方案就是这样:

我将var disabledFlag = true;放在我页面的head部分中,在调用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 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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'}

情况2 -

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

    return object;
}

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

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

答案 2 :(得分:1)

您不需要typeof

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

答案 3 :(得分:0)

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

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

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

查看here了解有关typeof

的更多信息