> 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
,但它并没有解决我阅读它的问题。
答案 0 :(得分:2)
Buffer
是一个对象平等是JavaScript最令人困惑的方面之一 ==与===的行为,类型强制的顺序等都会使主题复杂化。
您可能认为如果两个对象具有相同的属性且它们的所有属性具有相同的值,则它们将被视为相等。
内部JavaScript实际上有两种不同的方法来测试相等性。字符串和数字等原语按其值进行比较,而数组,日期和普通对象等对象则按其引用进行比较。通过引用进行的比较基本上会检查给定的对象是否指向内存中的相同位置。
例如:
[ 1 , 2 , 3 ] != [ 1 , 2 , 3 ]
在此处阅读更多http://designpepper.com/blog/drips/object-equality-in-javascript.html