首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript中new Boolean()的用途是什么?

Javascript中new Boolean()的用途是什么?
EN

Stack Overflow用户
提问于 2009-05-13 06:10:21
回答 4查看 22.6K关注 0票数 72

以下命令有什么用途:

var flag = new Boolean(false); 

对比:

var flag = false;

什么时候会真正使用new Boolean

EN

回答 4

Stack Overflow用户

发布于 2009-05-13 09:35:48

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

var foo = Boolean(bar); // equivalent to `var foo = !!bar`

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

var foo = new Boolean(bar); // equivalent to `var foo = Object(Boolean(bar));`
foo.baz = 'quux';
alert(foo.baz);

对于原始值,这是不可能的,因为原语不能保存属性:

var foo = true;
foo.baz = 'quux';
alert(foo.baz); // `foo.baz` is `undefined`

将属性分配给原语不会因为自动装箱而产生错误,例如

foo.baz = 'quux';

将被解释为

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

要取回原始值,必须调用valueOf()方法。如果您想实际使用包装值,这是必需的,因为在布尔上下文中,对象的计算结果总是为true -即使包装值为false

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

票数 75
EN

Stack Overflow用户

发布于 2013-06-21 14:29:06

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

因为Boolean对象(通常作为对象)总是真实的,所以使用它们被认为是不好的做法。在多年的JS编程中,我从未使用过它们,我也不记得在别人的代码中见过Boolean。一次也没有。

使用原始值将避免混淆,并使您的代码更短。

如果你需要一个布尔包在一个对象中,你可以像这样使用一个Object对象:

foo = { value: false };

此外,将Boolean()构造函数作为函数调用(就像在foo = Boolean(bar)中一样)与使用!!进行显式类型转换具有相同的效果,而且后者通常比前者更受欢迎。

票数 25
EN

Stack Overflow用户

发布于 2016-04-14 09:18:31

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

Boolean(10 > 4) // return true
Boolean(4 > 9) // return false

下一步:所有有实值的东西都返回true。E.g

100
-4
4.4
"hello"
"false" // note even the string value false return true.

所有没有实值的东西都返回false,例如

NaN 
var x = 10 / "H"; // Boolean(x); return false.
undefined
"" 
0
-0
false 
null

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

这允许使用非常强大的技巧。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/856324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档