检查变量是否为假且既不是真也不是未定义。

47

如何最好地检查myvar的javascript variable === false或不为false(它也可能未定义)。

if (myvar === false)

只有false是可接受的值,而不是未定义的值,在这种情况下,myvar可能是未定义的,所以if (typeof myvar !== "undefined" && myvar === false)是可以的,但还有其他更短的写法吗?


你是只想要 falseundefined,还是只是想要任何“假值”,这样就可以使用 if (myvar) ... 了呢? - adeneo
你应该可以正常工作,或者如果你真的想明确一些,那么可以这样写:if((myvar === false) && (myvar !== undefined)){ - PlantTheIdea
5个回答

64

如果该变量已被声明,则:

if (myvar === false) {

会正常工作。=== 不认为 false 是未定义的。

如果它既是 undefined 又是未声明的,那么在尝试使用它之前应该检查它的类型(否则会引发引用错误)。

if(typeof myvar === 'boolean' && myvar === false) {

话虽如此,如果您计划尝试使用变量,则应确保始终声明该变量。

var myvar;
// ...
// some code that may or may not assign a value to myvar
// ...
if (myvar === false) {

8
if(typeof myvar === 'boolean' && !myvar)

3

如果 (myvar !== undefined && myvar === false),怎么样?


1
undefined 可以被重新定义为其他值,因此您应该始终使用 typeof 或定义本地的 undefined - Derek 朕會功夫
@Derek朕會功夫 現代瀏覽器已不支援。 - Ingo Bürk
@IngoBürk - 大多数互联网用户没有现代浏览器,尤其是在商业环境下的计算机。 - Derek 朕會功夫
2
@Derek朕會功夫,您可以輕鬆查閱統計數據,以了解互聯網上的大多數用戶實際上使用的是足夠現代化的瀏覽器,以禁止此類操作。無論如何,如果您有重新定義“undefined”的代碼,那麼您正在做一些非常錯誤的事情。如果庫這樣做,請刪除該庫。 - Ingo Bürk
就编程而言,我个人仍然更喜欢使用 typeof 检查语句,因为这样更符合语义。我只是在讨论重新定义变量值的问题。 - Ingo Bürk

0

使用 lodash,您可以使用 isBoolean 函数

if(isBoolean(myvar) && myvar === false)

0
在Node.js中,通过使用node-boolify是可能的。
var Boolify = require('node-boolify').Boolify;
if (Boolify(myVar) == false) {
    //Instructions when satisfy
} else {
    //Instructions when not satisfy
}

布尔转换结果

Boolify(true); //true
Boolify('true'); //true
Boolify('TRUE'); //null
Boolify(1); //true
Boolify(2); //null
Boolify(false); //false
Boolify('false'); //false
Boolify('FALSE'); //null
Boolify(0); //false
Boolify(null); //null
Boolify(undefined); //null
Boolify(); //null
Boolify(''); //null

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接