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 数组返回“object”而不是“array”? [复制]