Description
- Version:
v6.1.0
- Platform:
Linux ███ 3.13.0-97-generic #144-Ubuntu SMP Thu Sep 22 16:23:22 UTC 2016 i686 i686 i686 GNU/Linux
- Subsystem: assert
Hi,
I'm developing an assert lib and it disagrees with node's. While debugging, I found rule 7.4 in master/lib/assert.js @ d4061a6 that to me sounds very similar to rule 7.3 in the CJS spec:
// 7.4. Other pairs that do not both pass typeof value == 'object',
// equivalence is determined by ==.
} else if ((actual === null || typeof actual !== 'object') &&
(expected === null || typeof expected !== 'object')) {
I think the condition tests both values for being primitives, aka not objects. Firefox seems to agree:
var actual = true, expected = [ 1 ];
console.log([ (actual === null || typeof actual !== 'object'), '&&',
(expected === null || typeof expected !== 'object') ]);
// -> Array [ true, "&&", false ]
So one passes the object check, the other does not, as expected.
Is it a pair where both values pass the object check? No.
So shouldn't it count as a "[pair] that do not both pass typeof […] object"?
If the partial conditions negate the object check and check for being primiteves instead, shouldn't the binary operator change to ||
?
Pre-emptive: In case anyone feels inclined to discuss the quality of the CJS UT spec and/or how much better deepStrictEqual
is, please make another issue for that.