valueOf()在javascript中的意义

我已经注意到在执行一个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); } 

如果你有一个对象包装器,并且你想获得底层原始值,你应该使用valueOf()方法。 这被称为拆箱

所有普通的对象都有内置的Object.prototype作为原型链的顶部(就像范围查找中的全局范围一样),如果在链中任何地方都找不到,属性parsing就会停止。 toString()valueOf()等几个常用工具存在于这个Object.prototype对象上,解释了这个语言中的所有对象是如何访问它们的。

假设下面的例子:

 var i = 2; Number.prototype.valueOf = function() { return i++; }; var a = new Number( 42 ); if (a == 2 && a == 3) { console.log( "Yep, this happened." ); } 

这与你的snipper的行为方式相同吗? 答案是不。