typeof options == 'object' && options,为啥这会返回对象值? [复制]

Posted

技术标签:

【中文标题】typeof options == \'object\' && options,为啥这会返回对象值? [复制]【英文标题】: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 【参考方案1】:

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

let x = true && 5
x returns 5;

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

【讨论】:

以上是关于typeof options == 'object' && options,为啥这会返回对象值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

判断对象类型 typeof instanceof Object.prototype.tostring()

typeof()与Object.prototype.toString.call()

typeof 返回的数据类型

为啥带有对象的 typeof 数组返回“object”而不是“array”? [复制]

JavaScript为啥(typeof Object)返回的是function

typeof Object.prototype.toString和 instanceof