aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compress.js7
-rw-r--r--test/compress/issue-2871.js37
2 files changed, 43 insertions, 1 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 321ee5fc..a48d0c9a 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -4790,6 +4790,7 @@ merge(Compressor.prototype, {
if (compressor.option("comparisons")) switch (self.operator) {
case "===":
case "!==":
+ var is_strict_comparison = true;
if ((self.left.is_string(compressor) && self.right.is_string(compressor)) ||
(self.left.is_number(compressor) && self.right.is_number(compressor)) ||
(self.left.is_boolean() && self.right.is_boolean()) ||
@@ -4799,8 +4800,12 @@ merge(Compressor.prototype, {
// XXX: intentionally falling down to the next case
case "==":
case "!=":
+ // void 0 == x => null == x
+ if (!is_strict_comparison && is_undefined(self.left, compressor)) {
+ self.left = make_node(AST_Null, self.left);
+ }
// "undefined" == typeof x => undefined === x
- if (compressor.option("typeofs")
+ else if (compressor.option("typeofs")
&& self.left instanceof AST_String
&& self.left.value == "undefined"
&& self.right instanceof AST_UnaryPrefix
diff --git a/test/compress/issue-2871.js b/test/compress/issue-2871.js
new file mode 100644
index 00000000..43c8352b
--- /dev/null
+++ b/test/compress/issue-2871.js
@@ -0,0 +1,37 @@
+comparison_with_undefined: {
+ options = {
+ comparisons: true,
+ }
+ input: {
+ a == undefined;
+ a != undefined;
+ a === undefined;
+ a !== undefined;
+
+ undefined == a;
+ undefined != a;
+ undefined === a;
+ undefined !== a;
+
+ void 0 == a;
+ void 0 != a;
+ void 0 === a;
+ void 0 !== a;
+ }
+ expect: {
+ null == a;
+ null != a;
+ void 0 === a;
+ void 0 !== a;
+
+ null == a;
+ null != a;
+ void 0 === a;
+ void 0 !== a;
+
+ null == a;
+ null != a;
+ void 0 === a;
+ void 0 !== a;
+ }
+}