【问题标题】:typeof options == 'object' && options, why does this return the object value? [duplicate]typeof options == 'object' && options,为什么这会返回对象值? [复制]
【发布时间】:2020-06-05 22:49:17
【问题描述】:

为什么下面的代码有效? 为什么变量options 中的对象被分配给i_identify_as_boolean 而不是布尔值?

在这种情况下,我希望得到一个布尔值。如果我写typeof foo == 'object' ? foo : null 但不是以这种方式,我希望这会起作用。这样,我会期待一个布尔值。

那么为什么它会起作用?我已经尝试阅读 typeof 文档和 this 但没有任何说明这种行为。

let options = {hello: 'world'};
let i_identify_as_boolean = typeof options == 'object' && options;
let i_identify_as_object = typeof options == 'object' ? options : null;
console.log(i_identify_as_object.hello);
console.log(i_identify_as_boolean.hello);

【问题讨论】:

  • 这是对as_boolean 的奇怪命名,因为该属性存储一个对象,而不是布尔值。基本上,由于 JS 执行这段代码的方式,这段代码只是一个 (丑陋的?) 等价于typeof options == 'object' ? options : false

标签: javascript


【解决方案1】:

如果所有条件都是真实的,它将始终将其设置为最后一个真实变量。

let x = true && 5
x returns 5;

如果你想将变量用作布尔值,你可以对它进行双重否定,以便它返回一个布尔值 !!x

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-22
    • 2012-10-11
    • 2011-02-20
    • 2018-05-08
    相关资源
    最近更新 更多