什么是JavaScript中的Boolean.valueOf

时间:2014-10-27 23:34:34

标签: javascript arrays boolean

Boolean.valueOf的Typeof是一个函数,但是它做了什么?为什么对象版本的基元具有像Array.valueOf这样的方法?它与例如Boolean.prototype.valueOf ...

不同

另外,Boolean.toString()的重点是它只返回:" function Boolean(){[native code]}"。还有像Array,Number这样的其他对象......

2 个答案:

答案 0 :(得分:9)

为什么会发生

Boolean是一个函数,就像StringObject一样,您可以将其称为将某些内容转换为布尔值的函数,例如:

Boolean(3); // true

JavaScript中的所有函数都是对象,作为对象,它们具有.valueOf属性。由于Boolean是一个函数,因此valueOf非常有意义。由于它通过原型继承调用Object#valueOf,它只返回相同的对象



alert(Boolean.valueOf() === Boolean) // true

// for the same reason
var x = {};
alert(x.valueOf() === x); // true




规范声明:

  

15.2.4.4 Object.prototype.valueOf

     

设O是调用ToObject传递此值作为参数的结果。

反过来:

  

9.9 ToObject

     

结果是输入参数(无转换)。

的含义

.valueOf存在的原因是为显式值获取提供接口。它在语言的背景中被广泛使用(正如其他答案所提到的,很像.toString)。例如,它可以采用Number对象并将其转换为原始数字数据类型。

以下是一个例子:

  

3 == {valueOf:function(){return 3; }} // true

     

4< {valueOf:function(){return 2; }} //错误

     

Math.max(3,{valueOf:function(){return 5;}})// 5,而不是对象

它有些不完整而且说实话,我们在JavaScript中没有一个很好的用户定义值解决方案,直到ES7开始使用值类型。

答案 1 :(得分:2)

根据输出,似乎.valueOf类似于.toString方法。

  

JavaScript调用valueOf方法将对象转换为原始值。您很少需要自己调用valueOf方法;当遇到期望原始值的对象时,JavaScript会自动调用它。

     

默认情况下,valueOf方法由来自Object的每个对象继承。每个内置核心对象都会覆盖此方法以返回适当的值。

Source

基本上.valueOf用于返回对象的原始版本,但您不需要自己调用它。您可以在库中使用它。例如,您有一个请求对象而不是编写自己的方法,您可以扩展.valueOf并返回请求的状态。

  

另外,Boolean.toString()的意思是它只返回:“function Boolean(){[native code]}”。

我不确定Boolean.toString(),但是Boolean.prototype.toString()非常有用。使用.toString方法,您可以获取任何对象的字符串表示形式,请考虑以下示例:

var bool = true;

console.log(bool.toString()); // "true"

在某些情况下,获取对象的字符串表示可能会有所帮助,但在大多数情况下,JS会在字符串连接期间自动转换字符串中的对象(+运算符)。

有关.toString的更多信息。