或者gate(||)将false排序为未定义



我有一个这样的代码:

var IFS =
    document.isFullScreen || 
    document.webkitIsFullScreen || 
    document.mozIsFullScreen || 
    document.msIsFullScreen;

确切的问题是||门将false排序为undefined,因为isFullScreen是布尔值

我该如何解决这个问题?

如果每个元素都未定义,则IFS将未定义。由于undefined是一个错误的值,您仍然可以将条件语句设置为:

var IFS =
    document.isFullScreen || 
    document.webkitIsFullScreen || 
    document.mozIsFullScreen || 
    document.msIsFullScreen;
if(!IFS){
    console.log('not full screen');
}

如果你仍然想保持false的值,以防其他变量都是undefined,那么你可以使用这样的方法:

var IFS =
    document.isFullScreen || 
    document.webkitIsFullScreen || 
    document.mozIsFullScreen || 
    document.msIsFullScreen || 
    false;

undefined是一个false值,这意味着||运算符将转换为与false相同的值。

如果你只想找到第一个没有定义的值,你可以尝试这样的方法:

var IFS =
    (typeof document.isFullScreen != "undefined") ? document.isFullScreen :
    (typeof document.webkitIsFullScreen != "undefined") ? document.webkitIsFullScreen :
    (typeof document.mozIsFullScreen != "undefined") ? document.mozIsFullScreen :
    (typeof document.msIsFullScreen != "undefined") ? document.msIsFullScreen : 
    false;

或者正如Niet所建议的:

var IFS =
    ('isFullScreen' in document) ? document.isFullScreen :
    ('webkitIsFullScreen' in document) ? document.webkitIsFullScreen :
    ('mozIsFullScreen' in document) ? document.mozIsFullScreen :
    ('msIsFullScreen' in document) ? document.msIsFullScreen : 
    false;

或者你可以使用一个数组,像这样:

var arr = ['isFullScreen', 'webkitIsFullScreen', 'mozIsFullScreen', 'msIsFullScreen'];
var IFS = false;
for (var i = 0; i < arr.length; i++) {
    if (arr[i] in document) {
        IFS = document[arr[i]];
        break;
    }
}

或者像这个

var arr = ['isFullScreen', 'webkitIsFullScreen', 'mozIsFullScreen', 'msIsFullScreen'];
var key = arr.filter(function(e) { return e in document; })[0];
var IFS = !!document[key];

相关内容

最新更新