Javascript 如何确定变量是否未定义

Javascript 如何确定变量是否未定义,javascript,jquery,Javascript,Jquery,在另一个问题中,我正在决定如何关闭函数,有效的解决方案是: I placevar disabledFlag=true在我的页面的标题部分,在调用shell.js之前,在shell.js中我有: /*******************************/ /* TOGGLE BUTTON /*******************************/ var toggleBlock = function() { console.log(disabledFlag); i

在另一个问题中,我正在决定如何关闭函数,有效的解决方案是:

I place
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,然后执行上面的代码?

试试看

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

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

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

if(neverDeclared == null) //throws ReferenceError: neverDeclared is not defined
var toggleBlock = function() {
    var disabledFlag = disabledFlag||false;

    if(!disabledFlag){
    //etc.

查看有关
typeof
的更多信息,您不需要
typeof

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

有比使用ternaries或
if-else
语句更简单的方法

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

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

if(neverDeclared == null) //throws ReferenceError: neverDeclared is not defined
var toggleBlock = function() {
    var disabledFlag = disabledFlag||false;

    if(!disabledFlag){
    //etc.
undefined
是falsy,因此它与逻辑的
|
运算符一起工作。该
|
运算符使新的
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'}
情景2-

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库和模块模式项目中,这个概念经常以许多不同的方式使用。

添加if(disabledFlag==undefined){var disabledFlag=false;};仍然不工作,不要使用
var
。这使得变量位于其所在范围的局部,即if块。你想把它挂在窗户上。嗯,还是不起作用,你说的话很有道理,所以我不知道为什么它不起作用。现在它神奇地起作用了。我假设服务器级缓存已过期。我们在每个实例中自动生成htmlc文件,一旦它被导出,它就开始工作了。