什么是JavaScript中的Boolean.valueOf

Mic*_*cki 4 javascript arrays boolean

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

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

Ben*_*aum 9

为什么会这样

Boolean是一个函数,就像StringObject,你可以把它称为一个函数来将一些东西转换成一个布尔值,例如:

Boolean(3); // true
Run Code Online (Sandbox Code Playgroud)

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

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

// for the same reason
var x = {};
alert(x.valueOf() === x); // true
Run Code Online (Sandbox Code Playgroud)

规范说明:

15.2.4.4 Object.prototype.valueOf

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

这又反过来了:

9.9 ToObject

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

它的用途是什么

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

这是一个例子:

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

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

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

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