Boolean.valueOf的Typeof是一个函数,但是它做了什么?为什么对象版本的基元具有像Array.valueOf这样的方法?它与例如Boolean.prototype.valueOf ...
不同另外,Boolean.toString()的重点是它只返回:" function Boolean(){[native code]}"。还有像Array,Number这样的其他对象......
答案 0 :(得分:9)
Boolean
是一个函数,就像String
和Object
一样,您可以将其称为将某些内容转换为布尔值的函数,例如:
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的每个对象继承。每个内置核心对象都会覆盖此方法以返回适当的值。
基本上.valueOf用于返回对象的原始版本,但您不需要自己调用它。您可以在库中使用它。例如,您有一个请求对象而不是编写自己的方法,您可以扩展.valueOf并返回请求的状态。
另外,Boolean.toString()的意思是它只返回:“function Boolean(){[native code]}”。
我不确定Boolean.toString(),但是Boolean.prototype.toString()非常有用。使用.toString方法,您可以获取任何对象的字符串表示形式,请考虑以下示例:
var bool = true;
console.log(bool.toString()); // "true"
在某些情况下,获取对象的字符串表示可能会有所帮助,但在大多数情况下,JS会在字符串连接期间自动转换字符串中的对象(+
运算符)。
有关.toString的更多信息。