为什么Buffer slice不等于它应该是什么?

时间:2014-06-17 09:38:19

标签: javascript node.js

> var b1 = Buffer("d@@");
undefined
> b1.slice(1, 3)
<Buffer 40 40>
> b1.slice(1, 3) == Buffer("@@")
false

如您所见,最后一行显示b1.slice(1, 3)不等于Buffer("@@"),这让我感到困惑。有人会告诉我原因吗?

以下是节点文档中的buf.slice,但它并没有解决我阅读它的问题。

1 个答案:

答案 0 :(得分:2)

Buffer是一个对象

平等是JavaScript最令人困惑的方面之一 ==与===的行为,类型强制的顺序等都会使主题复杂化。

您可能认为如果两个对象具有相同的属性且它们的所有属性具有相同的值,则它们将被视为相等。

内部JavaScript实际上有两种不同的方法来测试相等性。字符串和数字等原语按其值进行比较,而数组,日期和普通对象等对象则按其引用进行比较。通过引用进行的比较基本上会检查给定的对象是否指向内存中的相同位置。

例如:

[ 1 , 2 , 3 ] != [ 1 , 2 , 3 ]

在此处阅读更多http://designpepper.com/blog/drips/object-equality-in-javascript.html

如何比较缓冲区:

Buffer comparison in Node.js