Skip to content

Commit 3eea06e

Browse files
committed
Fixed NaN comparison bug
1 parent d7e6cae commit 3eea06e

File tree

2 files changed

+14
-17
lines changed

2 files changed

+14
-17
lines changed

dist/index.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,17 @@ exports.testDiff = void 0;
44
function testValue(value1, value2) {
55
if ((typeof value1) !== (typeof value2))
66
return true;
7-
if (Number.isNaN(value1) !== Number.isNaN(value2))
8-
return true;
7+
if (Number.isNaN(value1) || Number.isNaN(value2))
8+
return Number.isNaN(value1) !== Number.isNaN(value2);
99
if ((value1 !== value2))
1010
return true;
11+
return false;
1112
}
1213
// Returns true if obj1 differs in any way from obj2.
1314
function testDiff(obj1, obj2, deep) {
1415
if (deep === void 0) { deep = true; }
15-
if (obj1 === null)
16-
return obj1 !== obj2;
17-
// Cheap comparisons first
18-
if (((typeof obj1) !== "object") && testValue(obj1, obj2))
19-
return true;
16+
if ((obj1 === null) || (obj2 === null) || ((typeof obj1) !== "object") || ((typeof obj2) !== "object"))
17+
return testValue(obj1, obj2);
2018
var stack = [{ obj1: obj1, obj2: obj2 }];
2119
var seen = new Map();
2220
seen.set(obj1, stack[0]);
@@ -40,7 +38,7 @@ function testDiff(obj1, obj2, deep) {
4038
var value2 = objects.obj2[prop];
4139
if ((typeof value1) !== (typeof value2))
4240
return { value: true };
43-
if (value1 === null || (typeof value1) !== "object") {
41+
if (value1 === null || value2 === null || ((typeof value1) !== "object") || ((typeof value2) !== "object")) {
4442
if (testValue(value1, value2))
4543
return { value: true };
4644
continue _props;

src/index.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
type searchObj = any|object|Array<any>;
22
type objPair = {obj1:searchObj, obj2: searchObj};
3-
function testValue(value1, value2) {
3+
type Primitive = symbol|boolean|string|number|null|undefined;
4+
function testValue(value1:Primitive, value2:Primitive):boolean {
45
if ((typeof value1) !== (typeof value2))
56
return true;
6-
if(Number.isNaN(value1) !== Number.isNaN(value2))
7-
return true;
7+
if(Number.isNaN(value1) || Number.isNaN(value2))
8+
return Number.isNaN(value1) !== Number.isNaN(value2);
89
if((value1 !== value2))
910
return true;
11+
return false;
1012
}
1113
// Returns true if obj1 differs in any way from obj2.
1214
export function testDiff(obj1:searchObj, obj2:searchObj, deep:boolean = true):boolean {
13-
if (obj1 === null)
14-
return obj1 !== obj2;
15-
// Cheap comparisons first
16-
if(((typeof obj1) !== "object") && testValue(obj1, obj2))
17-
return true;
15+
if((obj1 === null) || (obj2 === null) || ((typeof obj1) !== "object") || ((typeof obj2) !== "object"))
16+
return testValue(obj1, obj2);
1817
const stack:Array<objPair> = [{ obj1: obj1, obj2: obj2 }];
1918
const seen:Map<searchObj, objPair> = new Map();
2019
seen.set(obj1, stack[0]);
@@ -38,7 +37,7 @@ export function testDiff(obj1:searchObj, obj2:searchObj, deep:boolean = true):bo
3837
const value2:any = objects.obj2[prop];
3938
if ((typeof value1) !== (typeof value2))
4039
return true;
41-
if (value1 === null || (typeof value1) !== "object") {
40+
if (value1 === null || value2 === null || ((typeof value1) !== "object") || ((typeof value2) !== "object")) {
4241
if(testValue(value1, value2))
4342
return true;
4443
continue _props;

0 commit comments

Comments
 (0)