我注意到其中一个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);
}
答案 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." );
}
这会与你的片段表现方式相同吗?答案是否定的。