1

我只猜到了 2 个。真/假。Howerver 从 underscore.js 检查布尔类型,我们有:

_.isBoolean = function(obj) {
    return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
  };

我原以为检查 true 或 false 的值就足够了,但是第三个操作数的 bc

 toString.call(obj) == '[object Boolean]'

必须有其他值吗?

4

3 回答 3

1

该方法检查该值是布尔基元(truefalse)还是布尔内置对象类型的实例。换句话说,涉及到两种类型,所以它对这两种类型都进行了检查。

于 2013-06-20T14:29:08.943 回答
1

还有一些布尔对象与原始对象不同(但仍然是布尔对象):

new Boolean(false) == false // true
new Boolean(false) === false // false
于 2013-06-20T14:29:19.667 回答
1

尝试这个:

var bool = new Boolean();

这构造了一个新的布尔对象。现在,大概,布尔值必须是trueor false,对吗?

bool === true; // returns false
bool === false; // returns false

所以它是一个布尔值,但既不是true也不是false。这是 underscore 适合的情况。

原因是它是一个Boolean 对象true并且false是 Javascript 原语。没有对象永远等于原始对象,或者实际上等于除自身之外的任何对象。

于 2013-06-20T14:29:48.663 回答