Javascript中新的Boolean()的目的是什么?

zer*_*n23 60 javascript boolean

有什么用?

var flag = new Boolean(false); 
Run Code Online (Sandbox Code Playgroud)

相比:

var flag = false;
Run Code Online (Sandbox Code Playgroud)

你什么时候实际使用new Boolean

Chr*_*oph 65

Boolean()在没有调用时,全局函数可以用于类型转换new,例如

var foo = Boolean(bar); // equivalent to `var foo = !!bar`
Run Code Online (Sandbox Code Playgroud)

调用时new,将另外创建包装器对象,这意味着您可以为对象分配任意属性:

var foo = new Boolean(bar); // equivalent to `var foo = Object(Boolean(bar));`
foo.baz = 'quux';
alert(foo.baz);
Run Code Online (Sandbox Code Playgroud)

原始值无法实现这一点,因为基元不能保存属性:

var foo = true;
foo.baz = 'quux';
alert(foo.baz); // `foo.baz` is `undefined`
Run Code Online (Sandbox Code Playgroud)

将属性分配给基元不会因自动装箱而产生错误,即

foo.baz = 'quux';
Run Code Online (Sandbox Code Playgroud)

将被解释为

// create and immediately discard a wrapper object:
(new Boolean(foo)).baz = 'quux';
Run Code Online (Sandbox Code Playgroud)

要获得原始值,您必须调用该valueOf()方法.如果你想实际使用包装值,true则需要这样做,因为对象总是在布尔上下文中求值 - 即使包装的值是false.

我从来没有遇到过能够为booleans分配属性的有用应用程序,但是在需要引用原始值的情况下,装箱可能很有用.

  • 调用Boolean(someVar)可以用于强制转换为布尔值原型,但请记住Boolean(false)== false,但是new Boolean(false)== true,因为它是一个对象 (4认同)
  • @torazaburo:`===`不强制 - `new Boolean(true)=== true`是假的 (4认同)
  • @Christoph抱歉,我的错误.然而,`boolean_object == true`(两个等号,而不是三个)**将**强制(我很确定,只是测试它). (3认同)

use*_*621 21

虽然其他人提到了这个理论,但让我谈谈实际部分:

因为Boolean对象(通常是对象)总是真实的,所以使用它们被认为是不好的做法.在JS编程的多年中,我从未使用它们,我也记不起Boolean在其他人的代码中看到s.从来没有.

使用原始值可以避免混淆,并使您的代码更短.

如果你需要一个包裹在一个对象中的bool,你也可以使用这样的Object对象:

foo = { value: false };
Run Code Online (Sandbox Code Playgroud)

此外,将Boolean()构造函数作为函数(如在foo = Boolean(bar))中调用与使用显式类型转换具有相同的效果!!,后者通常优先于前者.

  • 你声称对一对*not*运算符`!!`的一般偏好.但是`!!`的目的和效果似乎不如传统的`Boolean()`转换器那么明显,我想知道代码清晰度是否值得关注. (3认同)
  • 一注。永远不要使用导致 `Boolean` **Object** 的 `new`。然后每次你都必须在条件语句中使用 `foo.valueOf()`。而只是将 `Boolean` 作为一个函数调用,它只会导致类型转换,即 `Boolean(bar) === !!bar` (2认同)

小智 5

在上面的问题之前首先是布尔函数,Boolean ()

Boolean(10 > 4) // return true
Boolean(4 > 9) // return false
Run Code Online (Sandbox Code Playgroud)

下一步:所有有实际价值的东西都返回true。例如

100
-4
4.4
"hello"
"false" // note even the string value false return true.
Run Code Online (Sandbox Code Playgroud)

没有实际价值的一切都返回 false 例如

NaN 
var x = 10 / "H"; // Boolean(x); return false.
undefined
"" 
0
-0
false 
null
Run Code Online (Sandbox Code Playgroud)

现在该Boolean对象是布尔值的对象包装器。如有必要,作为第一个参数传递的值将转换为布尔值。如果 value 被省略或为0, -0, null, false, NaN, undefined,或为空字符串 ( ""),则该对象的初始值为 false。所有其他值(包括任何对象或字符串“false”)都会创建一个初始值为 true 的对象。

这允许非常强大的技巧。