valueOf()在javascript中的意义

时间:2017-09-15 09:15:47

标签: javascript node.js value-of

我注意到其中一个Node API的实现中的snippet_1。 Snippet_2是我写的。我觉得他们之间没什么区别。使用valueOf()函数真的有任何意义吗? 而且,我们可以注意到一个名为valueOf的属性,它将返回[Function: valueOf]

Snippet_1

Buffer.from = function from(value, encodingOrOffset, length) {
    const valueOf = value.valueOf && value.valueOf();
      if (valueOf !== null && valueOf !== undefined && valueOf !== value)
        return Buffer.from(valueOf, encodingOrOffset, length);

}

Snippet_2

Buffer.from = function from(value, encodingOrOffset, length) {
  if (value !== null && value !== undefined)
    return Buffer.from(value, encodingOrOffset, length);

}

1 个答案:

答案 0 :(得分:1)

如果您有一个对象包装器并且想要获取基础原始值,则应使用valueOf()方法。这称为取消装箱

所有普通对象都将内置的Object.prototype作为原型链的顶部(如范围查找中的全局范围),如果在链中的任何位置找不到属性解析,则属性解析将停止。此Object.prototype对象上存在toString()valueOf()和其他几个常用实用程序,解释了该语言中的所有对象如何访问它们。

假设以下示例:

var i = 2;

Number.prototype.valueOf = function() {
    return i++;
};

var a = new Number( 42 );

if (a == 2 && a == 3) {
    console.log( "Yep, this happened." );
}

这会与你的片段表现方式相同吗?答案是否定的。