assert.js rule 7.4 (similar to CJS rule 7.3)
- 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.