【问题标题】:What is Boolean.valueOf in JavaScriptJavaScript 中的 Boolean.valueOf 是什么
【发布时间】:2014-12-23 06:49:20
【问题描述】:

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

Boolean.toString() 还有什么意义,它只返回:“function Boolean() { [native code] }”。 Array、Number 等其他对象也有...

【问题讨论】:

标签: javascript arrays boolean


【解决方案1】:

根据输出,.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

【讨论】:

  • 说得好。在Boolean 上对.valueOf 的一个有趣观察是Boolean === Boolean.valueOf() 是真的:)
  • 是的,我也注意到,在原始 JS 对象(数组、数字、字符串等)的情况下,.valueOf 是无用的,但用于用户定义的对象很有帮助,例如有要求。 :)
  • 数组、数字、字符串等都是函数,我不确定你所说的“原始JS对象”是什么意思
  • 它们也是构造函数,原始对象是指语言的核心对象,如大多数语言中的原始对象(int、char、long、double 等)如果你不知道, JS 中的一切都是对象,即使是Function
  • 哦,您的意思是原始值类型,它们是字符串、数字、布尔值、null 和未定义。数组不是原始值类型,您可以阅读更多关于类型如何在语言here 中工作的信息。
【解决方案2】:

为什么会发生

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 并将 this 值作为参数传递的结果。

反过来:

9.9 目标对象

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

它的用途

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

这是一个例子:

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

4

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

这有点不完整,老实说,在 ES7 引入值类型之前,我们在 JavaScript 中对于用户定义的值没有一个好的解决方案。

【讨论】:

  • 非常好的编辑!最后一个例子真的很有趣
猜你喜欢
  • 2019-01-18
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多