【问题标题】:Check if value is false, true or null检查值是否为假、真或空
【发布时间】:2020-05-30 11:07:22
【问题描述】:

我想检查变量是否为假、真或空。如果为 null 或未定义,则默认将数组分配给变量。在其他语言中,这种语法可以很好地使用。然而,在 js 中,当值为 false 时,它​​会将数组分配给 myBool

const boolFromBody = false;
const myBool = boolFromBody || [true, false];
console.log(myBool)

我设法用这种语法做到了,我只检查空值

const boolFromBody = null;
let otherBool = boolFromBody;
if (boolFromBody === null) {
  otherBool = [true, false]
}
console.log(otherBool);

在js中有没有更好的方法呢?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    空值合并。

    检查变量是否为空或未定义,如果是,则将其分配给默认值。 0false 不被视为无效,将被分配给该值。

    nullish 合并运算符 ??|| 运算符非常相似,只是我们在评估运算符时不使用“truthy”。相反,我们使用nullish 的定义,意思是“值是否严格等于nullundefined?”

    let a = null;
    
    let b = a ?? "test";
    
    console.log(b);

    false 为例

    let a = false;
    
    let b = a ?? "test";
    
    console.log(b);

    【讨论】:

    • 好吧...我知道一定有更好的方法...谢谢
    • @delmin 注意如果你在前端使用它不是所有浏览器都支持它,所以你可能想结合 babel 使用它
    • 我注意到......它在我的项目中工作,所以一切正常......谢谢
    • "0 或 false 不被认为是虚假的" -> 你的意思是“nullish”或“nully”,而不是“falsy”,对吧?
    • 我认为“nullish”而不是“falsy”听起来不错,正如您在第一行中所写的那样。对我来说,0false 等...在 javascript 中总是“虚假”,因为每当它们被强制为布尔值 (if (myVar) ) 时,它们都会被评估为虚假。使用??,该值不会被强制为布尔值,它仅被强制为null /undefined(我认为是“nullish”)或“anything else”(非nullish)之一
    【解决方案2】:

    另一个答案的替代方案可以确保向后兼容性(即使 IE6 也支持),因为它不使用无效的合并运算符。如果您不使用 babel,它会更冗长但也更方便和易于访问。 希望对您有所帮助!

    const boolFromBody = null;
    let myBool = boolFromBody == (null || undefined) && [true, false];
    console.log(myBool);

    const boolFromBody = undefined;
    let myBool = boolFromBody == (null || undefined) && [true, false];
    console.log(myBool);

    const boolFromBody = false;
    let myBool = boolFromBody == (null || undefined) && [true, false];
    console.log(myBool);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 2013-10-27
      • 2017-02-20
      • 2014-08-05
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多