📅  最后修改于: 2023-12-03 15:25:18.355000             🧑  作者: Mango
在 JavaScript 中,任何数据类型都可以被转换为布尔值。但不同数据类型转换的规则会稍有不同。本文将着重介绍将对象转换为布尔值的规则。
当将一个对象转换为布尔值时,会执行对象的 valueOf()
方法。如果该方法的返回值为非 null 的原始值,则将该值转换为布尔值。如果 valueOf()
方法的返回值为对象,则继续执行 toString()
方法,并将其返回值转换为布尔值。
如果对象的 valueOf()
和 toString()
方法都没有返回值或者没有一个是原始值,则该对象默认返回 true
。
下面是一些例子:
// `valueOf()` 方法返回原始值
const obj1 = { value: true };
const bool1 = Boolean(obj1); // true
// `valueOf()` 方法返回对象
const obj2 = { valueOf: function() { return { foo: 'bar' } } };
const bool2 = Boolean(obj2); // true
// `toString()` 方法返回原始值
const obj3 = { toString: function() { return 'hello world' } };
const bool3 = Boolean(obj3); // true
// `valueOf()` 和 `toString()` 方法都返回对象
const obj4 = {
valueOf: function() { return { foo: 'bar' } },
toString(): function() { return { baz: 'qux' } }
};
const bool4 = Boolean(obj4); // true
// `valueOf()` 和 `toString()` 方法都没有返回值
// 返回默认的 `true`
const obj5 = {};
const bool5 = Boolean(obj5); // true
当将对象转换为布尔值时,会执行对象的 valueOf()
和 toString()
方法。返回值为非 null 的原始值则将其转换为布尔值,否则默认转换为 true
。
值得注意的是,只要 valueOf()
或 toString()
方法的返回值为非 null 的原始值,就可以提前退出对象类型转换成布尔值的过程,因为其它的值都可以被转换成布尔值。