关于javascript:如何确定变量是否未定义

how to determine if variable is undefined

本问题已经有最佳答案,请猛点这里访问。

在另一个关于so的问题中,我决定如何关闭一个函数,工作解决方案是:

我将EDOCX1[0]放在页面的头部分,在调用shell.js之前,在shell.js中,我有:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*******************************/
/*  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
2
if (typeof disabledFlag === 'undefined')
    disabledFlag = false;

有比使用三元或if else语句更容易做到这一点的方法。

就您的特定功能而言,您可以这样做:

1
2
3
4
5
var toggleBlock = function() {
    var disabledFlag = disabledFlag||false;

    if(!disabledFlag){
    //etc.

undefined是不稳定的,因此它与逻辑||运算符一起工作。||运算符使新的var disabledFlag设置为disabledFlag(如果存在),如果不存在,则将var设置为false

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

情景1

1
2
3
4
5
6
7
8
9
var obj = {hello: 'world'};

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

    return object;
}

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

情景2

1
2
3
4
5
6
7
function fn(object) {
    var object = object || {foo: 'bar'};

    return object;
}

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

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


你不需要typeof

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


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

1
2
3
if(typeof neverDeclared =="undefined") //no errors

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

在这里查看更多关于typeof的信息