我有一个这样的代码:
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];