From bc87aaee825d8131d64608d51f9a5faf1eaa0004 Mon Sep 17 00:00:00 2001
From: Denis Pushkarev <zloirock@zloirock.ru>
Date: Tue, 1 Aug 2023 09:21:54 +0700
Subject: [PATCH] enable `eqeqeq`, close #1225

---
 .../override/internals/collection.js          |   9 +-
 .../override/modules/es.date.to-json.js       |   2 +-
 .../core-js/internals/add-to-unscopables.js   |   2 +-
 .../internals/array-buffer-byte-length.js     |   2 +-
 .../internals/array-buffer-transfer.js        |   2 +-
 packages/core-js/internals/array-buffer.js    |   2 +-
 packages/core-js/internals/array-includes.js  |   4 +-
 .../internals/array-iteration-from-last.js    |   2 +-
 packages/core-js/internals/array-iteration.js |  14 +-
 .../internals/async-iterator-iteration.js     |   8 +-
 packages/core-js/internals/caller.js          |   2 +-
 packages/core-js/internals/classof.js         |   4 +-
 .../core-js/internals/collection-strong.js    |  10 +-
 packages/core-js/internals/collection.js      |  12 +-
 .../core-js/internals/date-to-iso-string.js   |   2 +-
 packages/core-js/internals/descriptors.js     |   2 +-
 packages/core-js/internals/engine-is-node.js  |   2 +-
 .../fix-regexp-well-known-symbol-logic.js     |   2 +-
 .../internals/get-json-replacer-function.js   |   2 +-
 packages/core-js/internals/get-set-record.js  |   2 +-
 packages/core-js/internals/global.js          |   2 +-
 .../core-js/internals/host-report-errors.js   |   2 +-
 packages/core-js/internals/ie8-dom-define.js  |   2 +-
 packages/core-js/internals/ieee754.js         |   4 +-
 packages/core-js/internals/indexed-object.js  |   2 +-
 packages/core-js/internals/is-array.js        |   2 +-
 .../core-js/internals/is-big-int-array.js     |   2 +-
 packages/core-js/internals/is-forced.js       |   4 +-
 packages/core-js/internals/is-regexp.js       |   2 +-
 packages/core-js/internals/iterator-define.js |   4 +-
 packages/core-js/internals/math-expm1.js      |   4 +-
 packages/core-js/internals/math-fround.js     |   2 +-
 packages/core-js/internals/math-scale.js      |   2 +-
 packages/core-js/internals/math-sign.js       |   2 +-
 .../core-js/internals/number-parse-float.js   |   2 +-
 .../internals/numeric-range-iterator.js       |   2 +-
 packages/core-js/internals/object-assign.js   |   2 +-
 .../object-get-own-property-names-external.js |   2 +-
 .../core-js/internals/object-is-extensible.js |   2 +-
 .../core-js/internals/parse-json-string.js    |   6 +-
 packages/core-js/internals/same-value-zero.js |   2 +-
 packages/core-js/internals/same-value.js      |   2 +-
 packages/core-js/internals/schedulers-fix.js  |   2 +-
 packages/core-js/internals/string-pad.js      |   2 +-
 .../internals/string-punycode-to-ascii.js     |   6 +-
 packages/core-js/internals/string-repeat.js   |   2 +-
 .../structured-clone-proper-transfer.js       |   2 +-
 .../core-js/internals/symbol-is-well-known.js |   1 +
 .../internals/typed-array-constructor.js      |   4 +-
 .../internals/v8-prototype-define-bug.js      |   2 +-
 packages/core-js/modules/es.array.for-each.js |   2 +-
 packages/core-js/modules/es.array.iterator.js |   7 +-
 packages/core-js/modules/es.array.join.js     |   2 +-
 packages/core-js/modules/es.date.to-string.js |   2 +-
 packages/core-js/modules/es.json.stringify.js |   6 +-
 packages/core-js/modules/es.math.acosh.js     |   4 +-
 packages/core-js/modules/es.math.asinh.js     |   2 +-
 packages/core-js/modules/es.math.atanh.js     |   2 +-
 packages/core-js/modules/es.math.expm1.js     |   2 +-
 packages/core-js/modules/es.math.imul.js      |   2 +-
 packages/core-js/modules/es.math.sinh.js      |   2 +-
 packages/core-js/modules/es.math.tanh.js      |   2 +-
 packages/core-js/modules/es.number.is-nan.js  |   2 +-
 .../core-js/modules/es.number.parse-float.js  |   2 +-
 .../core-js/modules/es.number.parse-int.js    |   2 +-
 .../core-js/modules/es.number.to-fixed.js     |   2 +-
 .../core-js/modules/es.object.is-frozen.js    |   2 +-
 .../core-js/modules/es.object.is-sealed.js    |   2 +-
 packages/core-js/modules/es.parse-float.js    |   2 +-
 packages/core-js/modules/es.parse-int.js      |   2 +-
 .../core-js/modules/es.promise.constructor.js |   4 +-
 .../core-js/modules/es.reflect.construct.js   |   2 +-
 .../core-js/modules/es.regexp.constructor.js  |   2 +-
 .../core-js/modules/es.regexp.to-string.js    |   4 +-
 .../modules/es.string.from-code-point.js      |   2 +-
 .../modules/es.string.is-well-formed.js       |   4 +-
 .../core-js/modules/es.string.match-all.js    |   2 +-
 packages/core-js/modules/es.string.split.js   |   8 +-
 .../modules/es.string.to-well-formed.js       |   4 +-
 .../core-js/modules/es.symbol.constructor.js  |   2 +-
 .../core-js/modules/es.symbol.description.js  |   2 +-
 .../es.typed-array.to-locale-string.js        |   2 +-
 .../modules/es.typed-array.to-string.js       |   2 +-
 .../modules/es.weak-map.constructor.js        |   4 +-
 .../modules/esnext.array.last-index.js        |   2 +-
 .../core-js/modules/esnext.array.last-item.js |   4 +-
 ...next.async-disposable-stack.constructor.js |   6 +-
 .../modules/esnext.composite-symbol.js        |   2 +-
 .../esnext.disposable-stack.constructor.js    |   6 +-
 packages/core-js/modules/esnext.json.parse.js |  28 +-
 .../core-js/modules/esnext.json.raw-json.js   |   6 +-
 .../core-js/modules/esnext.math.signbit.js    |   2 +-
 .../modules/esnext.number.from-string.js      |   2 +-
 .../modules/esnext.set.intersection.v2.js     |   2 +-
 packages/core-js/modules/web.atob.js          |   4 +-
 .../modules/web.dom-exception.constructor.js  |   2 +-
 .../core-js/modules/web.structured-clone.js   |   8 +-
 .../core-js/modules/web.url.constructor.js    | 254 +++++++++---------
 scripts/check-compat-data-mapping.mjs         |   2 +-
 tests/compat/tests.js                         |  78 +++---
 tests/eslint/eslint.config.js                 |   2 +
 tests/helpers/helpers.js                      |   2 +-
 102 files changed, 340 insertions(+), 331 deletions(-)

diff --git a/packages/core-js-pure/override/internals/collection.js b/packages/core-js-pure/override/internals/collection.js
index f179f5c9b6b2..9422c9c27227 100644
--- a/packages/core-js-pure/override/internals/collection.js
+++ b/packages/core-js-pure/override/internals/collection.js
@@ -8,6 +8,7 @@ var iterate = require('../internals/iterate');
 var anInstance = require('../internals/an-instance');
 var isCallable = require('../internals/is-callable');
 var isObject = require('../internals/is-object');
+var isNullOrUndefined = require('../internals/is-null-or-undefined');
 var setToStringTag = require('../internals/set-to-string-tag');
 var defineProperty = require('../internals/object-define-property').f;
 var forEach = require('../internals/array-iteration').forEach;
@@ -38,7 +39,7 @@ module.exports = function (CONSTRUCTOR_NAME, wrapper, common) {
         type: CONSTRUCTOR_NAME,
         collection: new NativeConstructor()
       });
-      if (iterable != undefined) iterate(iterable, target[ADDER], { that: target, AS_ENTRIES: IS_MAP });
+      if (!isNullOrUndefined(iterable)) iterate(iterable, target[ADDER], { that: target, AS_ENTRIES: IS_MAP });
     });
 
     var Prototype = Constructor.prototype;
@@ -46,11 +47,11 @@ module.exports = function (CONSTRUCTOR_NAME, wrapper, common) {
     var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
 
     forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) {
-      var IS_ADDER = KEY == 'add' || KEY == 'set';
-      if (KEY in NativePrototype && !(IS_WEAK && KEY == 'clear')) {
+      var IS_ADDER = KEY === 'add' || KEY === 'set';
+      if (KEY in NativePrototype && !(IS_WEAK && KEY === 'clear')) {
         createNonEnumerableProperty(Prototype, KEY, function (a, b) {
           var collection = getInternalState(this).collection;
-          if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;
+          if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY === 'get' ? undefined : false;
           var result = collection[KEY](a === 0 ? 0 : a, b);
           return IS_ADDER ? this : result;
         });
diff --git a/packages/core-js-pure/override/modules/es.date.to-json.js b/packages/core-js-pure/override/modules/es.date.to-json.js
index 03c82a9ce426..9537c0dc007a 100644
--- a/packages/core-js-pure/override/modules/es.date.to-json.js
+++ b/packages/core-js-pure/override/modules/es.date.to-json.js
@@ -20,6 +20,6 @@ $({ target: 'Date', proto: true, forced: FORCED }, {
     var O = toObject(this);
     var pv = toPrimitive(O, 'number');
     return typeof pv == 'number' && !isFinite(pv) ? null :
-      (!('toISOString' in O) && classof(O) == 'Date') ? call(toISOString, O) : O.toISOString();
+      (!('toISOString' in O) && classof(O) === 'Date') ? call(toISOString, O) : O.toISOString();
   }
 });
diff --git a/packages/core-js/internals/add-to-unscopables.js b/packages/core-js/internals/add-to-unscopables.js
index 2cb0ad713948..c0908db95fbb 100644
--- a/packages/core-js/internals/add-to-unscopables.js
+++ b/packages/core-js/internals/add-to-unscopables.js
@@ -8,7 +8,7 @@ var ArrayPrototype = Array.prototype;
 
 // Array.prototype[@@unscopables]
 // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
-if (ArrayPrototype[UNSCOPABLES] == undefined) {
+if (ArrayPrototype[UNSCOPABLES] === undefined) {
   defineProperty(ArrayPrototype, UNSCOPABLES, {
     configurable: true,
     value: create(null)
diff --git a/packages/core-js/internals/array-buffer-byte-length.js b/packages/core-js/internals/array-buffer-byte-length.js
index a5f269b9a84f..ae75aadea01c 100644
--- a/packages/core-js/internals/array-buffer-byte-length.js
+++ b/packages/core-js/internals/array-buffer-byte-length.js
@@ -8,6 +8,6 @@ var $TypeError = TypeError;
 // - Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
 // - If IsSharedArrayBuffer(O) is true, throw a TypeError exception.
 module.exports = uncurryThisAccessor(ArrayBuffer.prototype, 'byteLength', 'get') || function (O) {
-  if (classof(O) != 'ArrayBuffer') throw $TypeError('ArrayBuffer expected');
+  if (classof(O) !== 'ArrayBuffer') throw $TypeError('ArrayBuffer expected');
   return O.byteLength;
 };
diff --git a/packages/core-js/internals/array-buffer-transfer.js b/packages/core-js/internals/array-buffer-transfer.js
index c148ffa1dc00..f9005149f407 100644
--- a/packages/core-js/internals/array-buffer-transfer.js
+++ b/packages/core-js/internals/array-buffer-transfer.js
@@ -26,7 +26,7 @@ module.exports = PROPER_TRANSFER && function (arrayBuffer, newLength, preserveRe
   var fixedLength = !isResizable || !isResizable(arrayBuffer);
   if (isDetached(arrayBuffer)) throw TypeError('ArrayBuffer is detached');
   var newBuffer = structuredClone(arrayBuffer, { transfer: [arrayBuffer] });
-  if (byteLength == newByteLength && (preserveResizability || fixedLength)) return newBuffer;
+  if (byteLength === newByteLength && (preserveResizability || fixedLength)) return newBuffer;
   if (byteLength >= newByteLength && (!preserveResizability || fixedLength)) return slice(newBuffer, 0, newByteLength);
   var options = (preserveResizability && !fixedLength) && maxByteLength ? { maxByteLength: maxByteLength(newBuffer) } : undefined;
   var newNewBuffer = new ArrayBuffer(newByteLength, options);
diff --git a/packages/core-js/internals/array-buffer.js b/packages/core-js/internals/array-buffer.js
index 814c48f15ec7..4671de6061ed 100644
--- a/packages/core-js/internals/array-buffer.js
+++ b/packages/core-js/internals/array-buffer.js
@@ -212,7 +212,7 @@ if (!NATIVE_ARRAY_BUFFER) {
     new NativeArrayBuffer();
     new NativeArrayBuffer(1.5);
     new NativeArrayBuffer(NaN);
-    return NativeArrayBuffer.length != 1 || INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;
+    return NativeArrayBuffer.length !== 1 || INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;
   })) {
     /* eslint-enable no-new -- required for testing */
     $ArrayBuffer = function ArrayBuffer(length) {
diff --git a/packages/core-js/internals/array-includes.js b/packages/core-js/internals/array-includes.js
index b713c44d043a..7eac52379314 100644
--- a/packages/core-js/internals/array-includes.js
+++ b/packages/core-js/internals/array-includes.js
@@ -12,10 +12,10 @@ var createMethod = function (IS_INCLUDES) {
     var value;
     // Array#includes uses SameValueZero equality algorithm
     // eslint-disable-next-line no-self-compare -- NaN check
-    if (IS_INCLUDES && el != el) while (length > index) {
+    if (IS_INCLUDES && el !== el) while (length > index) {
       value = O[index++];
       // eslint-disable-next-line no-self-compare -- NaN check
-      if (value != value) return true;
+      if (value !== value) return true;
     // Array#indexOf ignores holes, Array#includes - not
     } else for (;length > index; index++) {
       if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
diff --git a/packages/core-js/internals/array-iteration-from-last.js b/packages/core-js/internals/array-iteration-from-last.js
index 8af359cbff08..ff9d511985b0 100644
--- a/packages/core-js/internals/array-iteration-from-last.js
+++ b/packages/core-js/internals/array-iteration-from-last.js
@@ -6,7 +6,7 @@ var lengthOfArrayLike = require('../internals/length-of-array-like');
 
 // `Array.prototype.{ findLast, findLastIndex }` methods implementation
 var createMethod = function (TYPE) {
-  var IS_FIND_LAST_INDEX = TYPE == 1;
+  var IS_FIND_LAST_INDEX = TYPE === 1;
   return function ($this, callbackfn, that) {
     var O = toObject($this);
     var self = IndexedObject(O);
diff --git a/packages/core-js/internals/array-iteration.js b/packages/core-js/internals/array-iteration.js
index 718206de65b0..4abd8bd89870 100644
--- a/packages/core-js/internals/array-iteration.js
+++ b/packages/core-js/internals/array-iteration.js
@@ -10,13 +10,13 @@ var push = uncurryThis([].push);
 
 // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation
 var createMethod = function (TYPE) {
-  var IS_MAP = TYPE == 1;
-  var IS_FILTER = TYPE == 2;
-  var IS_SOME = TYPE == 3;
-  var IS_EVERY = TYPE == 4;
-  var IS_FIND_INDEX = TYPE == 6;
-  var IS_FILTER_REJECT = TYPE == 7;
-  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
+  var IS_MAP = TYPE === 1;
+  var IS_FILTER = TYPE === 2;
+  var IS_SOME = TYPE === 3;
+  var IS_EVERY = TYPE === 4;
+  var IS_FIND_INDEX = TYPE === 6;
+  var IS_FILTER_REJECT = TYPE === 7;
+  var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;
   return function ($this, callbackfn, that, specificCreate) {
     var O = toObject($this);
     var self = IndexedObject(O);
diff --git a/packages/core-js/internals/async-iterator-iteration.js b/packages/core-js/internals/async-iterator-iteration.js
index 4651467ad8eb..684c0bf88706 100644
--- a/packages/core-js/internals/async-iterator-iteration.js
+++ b/packages/core-js/internals/async-iterator-iteration.js
@@ -11,10 +11,10 @@ var getIteratorDirect = require('../internals/get-iterator-direct');
 var closeAsyncIteration = require('../internals/async-iterator-close');
 
 var createMethod = function (TYPE) {
-  var IS_TO_ARRAY = TYPE == 0;
-  var IS_FOR_EACH = TYPE == 1;
-  var IS_EVERY = TYPE == 2;
-  var IS_SOME = TYPE == 3;
+  var IS_TO_ARRAY = TYPE === 0;
+  var IS_FOR_EACH = TYPE === 1;
+  var IS_EVERY = TYPE === 2;
+  var IS_SOME = TYPE === 3;
   return function (object, fn, target) {
     anObject(object);
     var MAPPING = fn !== undefined;
diff --git a/packages/core-js/internals/caller.js b/packages/core-js/internals/caller.js
index 1a35ecdf62d2..c37987e67f2b 100644
--- a/packages/core-js/internals/caller.js
+++ b/packages/core-js/internals/caller.js
@@ -1,6 +1,6 @@
 'use strict';
 module.exports = function (methodName, numArgs) {
-  return numArgs == 1 ? function (object, arg) {
+  return numArgs === 1 ? function (object, arg) {
     return object[methodName](arg);
   } : function (object, arg1, arg2) {
     return object[methodName](arg1, arg2);
diff --git a/packages/core-js/internals/classof.js b/packages/core-js/internals/classof.js
index 9b5fd8b56638..8c0fae6ad9e4 100644
--- a/packages/core-js/internals/classof.js
+++ b/packages/core-js/internals/classof.js
@@ -8,7 +8,7 @@ var TO_STRING_TAG = wellKnownSymbol('toStringTag');
 var $Object = Object;
 
 // ES3 wrong here
-var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
+var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';
 
 // fallback for IE11 Script Access Denied error
 var tryGet = function (it, key) {
@@ -26,5 +26,5 @@ module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
     // builtinTag case
     : CORRECT_ARGUMENTS ? classofRaw(O)
     // ES3 arguments fallback
-    : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;
+    : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;
 };
diff --git a/packages/core-js/internals/collection-strong.js b/packages/core-js/internals/collection-strong.js
index 0e6b674ed974..9312373d9cac 100644
--- a/packages/core-js/internals/collection-strong.js
+++ b/packages/core-js/internals/collection-strong.js
@@ -69,7 +69,7 @@ module.exports = {
       if (index !== 'F') return state.index[index];
       // frozen object case
       for (entry = state.first; entry; entry = entry.next) {
-        if (entry.key == key) return entry;
+        if (entry.key === key) return entry;
       }
     };
 
@@ -106,8 +106,8 @@ module.exports = {
           entry.removed = true;
           if (prev) prev.next = next;
           if (next) next.previous = prev;
-          if (state.first == entry) state.first = next;
-          if (state.last == entry) state.last = prev;
+          if (state.first === entry) state.first = next;
+          if (state.last === entry) state.last = prev;
           if (DESCRIPTORS) state.size--;
           else that.size--;
         } return !!entry;
@@ -194,8 +194,8 @@ module.exports = {
         return createIterResultObject(undefined, true);
       }
       // return step by kind
-      if (kind == 'keys') return createIterResultObject(entry.key, false);
-      if (kind == 'values') return createIterResultObject(entry.value, false);
+      if (kind === 'keys') return createIterResultObject(entry.key, false);
+      if (kind === 'values') return createIterResultObject(entry.value, false);
       return createIterResultObject([entry.key, entry.value], false);
     }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
 
diff --git a/packages/core-js/internals/collection.js b/packages/core-js/internals/collection.js
index 31eba24fbbca..6566580d08a5 100644
--- a/packages/core-js/internals/collection.js
+++ b/packages/core-js/internals/collection.js
@@ -27,14 +27,14 @@ module.exports = function (CONSTRUCTOR_NAME, wrapper, common) {
   var fixMethod = function (KEY) {
     var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);
     defineBuiltIn(NativePrototype, KEY,
-      KEY == 'add' ? function add(value) {
+      KEY === 'add' ? function add(value) {
         uncurriedNativeMethod(this, value === 0 ? 0 : value);
         return this;
-      } : KEY == 'delete' ? function (key) {
+      } : KEY === 'delete' ? function (key) {
         return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
-      } : KEY == 'get' ? function get(key) {
+      } : KEY === 'get' ? function get(key) {
         return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);
-      } : KEY == 'has' ? function has(key) {
+      } : KEY === 'has' ? function has(key) {
         return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
       } : function set(key, value) {
         uncurriedNativeMethod(this, key === 0 ? 0 : key, value);
@@ -57,7 +57,7 @@ module.exports = function (CONSTRUCTOR_NAME, wrapper, common) {
   } else if (isForced(CONSTRUCTOR_NAME, true)) {
     var instance = new Constructor();
     // early implementations not supports chaining
-    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
+    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) !== instance;
     // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false
     var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });
     // most early implementations doesn't supports iterables, most modern - not close it correctly
@@ -96,7 +96,7 @@ module.exports = function (CONSTRUCTOR_NAME, wrapper, common) {
   }
 
   exported[CONSTRUCTOR_NAME] = Constructor;
-  $({ global: true, constructor: true, forced: Constructor != NativeConstructor }, exported);
+  $({ global: true, constructor: true, forced: Constructor !== NativeConstructor }, exported);
 
   setToStringTag(Constructor, CONSTRUCTOR_NAME);
 
diff --git a/packages/core-js/internals/date-to-iso-string.js b/packages/core-js/internals/date-to-iso-string.js
index 6e9680664b0c..199847ab7a61 100644
--- a/packages/core-js/internals/date-to-iso-string.js
+++ b/packages/core-js/internals/date-to-iso-string.js
@@ -21,7 +21,7 @@ var getUTCSeconds = uncurryThis(DatePrototype.getUTCSeconds);
 // https://tc39.es/ecma262/#sec-date.prototype.toisostring
 // PhantomJS / old WebKit fails here:
 module.exports = (fails(function () {
-  return nativeDateToISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';
+  return nativeDateToISOString.call(new Date(-5e13 - 1)) !== '0385-07-25T07:06:39.999Z';
 }) || !fails(function () {
   nativeDateToISOString.call(new Date(NaN));
 })) ? function toISOString() {
diff --git a/packages/core-js/internals/descriptors.js b/packages/core-js/internals/descriptors.js
index a12e695bad33..7d6f24ab1e4d 100644
--- a/packages/core-js/internals/descriptors.js
+++ b/packages/core-js/internals/descriptors.js
@@ -4,5 +4,5 @@ var fails = require('../internals/fails');
 // Detect IE8's incomplete defineProperty implementation
 module.exports = !fails(function () {
   // eslint-disable-next-line es/no-object-defineproperty -- required for testing
-  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
+  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;
 });
diff --git a/packages/core-js/internals/engine-is-node.js b/packages/core-js/internals/engine-is-node.js
index 43020b8d2492..dce72da57fca 100644
--- a/packages/core-js/internals/engine-is-node.js
+++ b/packages/core-js/internals/engine-is-node.js
@@ -1,4 +1,4 @@
 'use strict';
 var classof = require('../internals/classof-raw');
 
-module.exports = typeof process != 'undefined' && classof(process) == 'process';
+module.exports = typeof process != 'undefined' && classof(process) === 'process';
diff --git a/packages/core-js/internals/fix-regexp-well-known-symbol-logic.js b/packages/core-js/internals/fix-regexp-well-known-symbol-logic.js
index c0c29f837a29..47a6b33387d7 100644
--- a/packages/core-js/internals/fix-regexp-well-known-symbol-logic.js
+++ b/packages/core-js/internals/fix-regexp-well-known-symbol-logic.js
@@ -18,7 +18,7 @@ module.exports = function (KEY, exec, FORCED, SHAM) {
     // String methods call symbol-named RegEp methods
     var O = {};
     O[SYMBOL] = function () { return 7; };
-    return ''[KEY](O) != 7;
+    return ''[KEY](O) !== 7;
   });
 
   var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {
diff --git a/packages/core-js/internals/get-json-replacer-function.js b/packages/core-js/internals/get-json-replacer-function.js
index 2d7407e16a44..abfdce42b35e 100644
--- a/packages/core-js/internals/get-json-replacer-function.js
+++ b/packages/core-js/internals/get-json-replacer-function.js
@@ -15,7 +15,7 @@ module.exports = function (replacer) {
   for (var i = 0; i < rawLength; i++) {
     var element = replacer[i];
     if (typeof element == 'string') push(keys, element);
-    else if (typeof element == 'number' || classof(element) == 'Number' || classof(element) == 'String') push(keys, toString(element));
+    else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element));
   }
   var keysLength = keys.length;
   var root = true;
diff --git a/packages/core-js/internals/get-set-record.js b/packages/core-js/internals/get-set-record.js
index 79f21ca7add6..18b29adf04e0 100644
--- a/packages/core-js/internals/get-set-record.js
+++ b/packages/core-js/internals/get-set-record.js
@@ -33,7 +33,7 @@ module.exports = function (obj) {
   var numSize = +obj.size;
   // NOTE: If size is undefined, then numSize will be NaN
   // eslint-disable-next-line no-self-compare -- NaN check
-  if (numSize != numSize) throw $TypeError(INVALID_SIZE);
+  if (numSize !== numSize) throw $TypeError(INVALID_SIZE);
   var intSize = toIntegerOrInfinity(numSize);
   if (intSize < 0) throw $RangeError(INVALID_SIZE);
   return new SetRecord(
diff --git a/packages/core-js/internals/global.js b/packages/core-js/internals/global.js
index 457e1c93e7cc..31fe0db00732 100644
--- a/packages/core-js/internals/global.js
+++ b/packages/core-js/internals/global.js
@@ -1,6 +1,6 @@
 'use strict';
 var check = function (it) {
-  return it && it.Math == Math && it;
+  return it && it.Math === Math && it;
 };
 
 // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
diff --git a/packages/core-js/internals/host-report-errors.js b/packages/core-js/internals/host-report-errors.js
index 185c2af5417f..1f3b26a86761 100644
--- a/packages/core-js/internals/host-report-errors.js
+++ b/packages/core-js/internals/host-report-errors.js
@@ -2,6 +2,6 @@
 module.exports = function (a, b) {
   try {
     // eslint-disable-next-line no-console -- safe
-    arguments.length == 1 ? console.error(a) : console.error(a, b);
+    arguments.length === 1 ? console.error(a) : console.error(a, b);
   } catch (error) { /* empty */ }
 };
diff --git a/packages/core-js/internals/ie8-dom-define.js b/packages/core-js/internals/ie8-dom-define.js
index 0e93b82aab61..22719e88807e 100644
--- a/packages/core-js/internals/ie8-dom-define.js
+++ b/packages/core-js/internals/ie8-dom-define.js
@@ -8,5 +8,5 @@ module.exports = !DESCRIPTORS && !fails(function () {
   // eslint-disable-next-line es/no-object-defineproperty -- required for testing
   return Object.defineProperty(createElement('div'), 'a', {
     get: function () { return 7; }
-  }).a != 7;
+  }).a !== 7;
 });
diff --git a/packages/core-js/internals/ieee754.js b/packages/core-js/internals/ieee754.js
index fbda4346237d..6fe6095a3a4f 100644
--- a/packages/core-js/internals/ieee754.js
+++ b/packages/core-js/internals/ieee754.js
@@ -18,9 +18,9 @@ var pack = function (number, mantissaLength, bytes) {
   var exponent, mantissa, c;
   number = abs(number);
   // eslint-disable-next-line no-self-compare -- NaN check
-  if (number != number || number === Infinity) {
+  if (number !== number || number === Infinity) {
     // eslint-disable-next-line no-self-compare -- NaN check
-    mantissa = number != number ? 1 : 0;
+    mantissa = number !== number ? 1 : 0;
     exponent = eMax;
   } else {
     exponent = floor(log(number) / LN2);
diff --git a/packages/core-js/internals/indexed-object.js b/packages/core-js/internals/indexed-object.js
index 2e3125a8c771..cea2a9a265cb 100644
--- a/packages/core-js/internals/indexed-object.js
+++ b/packages/core-js/internals/indexed-object.js
@@ -12,5 +12,5 @@ module.exports = fails(function () {
   // eslint-disable-next-line no-prototype-builtins -- safe
   return !$Object('z').propertyIsEnumerable(0);
 }) ? function (it) {
-  return classof(it) == 'String' ? split(it, '') : $Object(it);
+  return classof(it) === 'String' ? split(it, '') : $Object(it);
 } : $Object;
diff --git a/packages/core-js/internals/is-array.js b/packages/core-js/internals/is-array.js
index d7431c61523e..14ea3b01ec1c 100644
--- a/packages/core-js/internals/is-array.js
+++ b/packages/core-js/internals/is-array.js
@@ -5,5 +5,5 @@ var classof = require('../internals/classof-raw');
 // https://tc39.es/ecma262/#sec-isarray
 // eslint-disable-next-line es/no-array-isarray -- safe
 module.exports = Array.isArray || function isArray(argument) {
-  return classof(argument) == 'Array';
+  return classof(argument) === 'Array';
 };
diff --git a/packages/core-js/internals/is-big-int-array.js b/packages/core-js/internals/is-big-int-array.js
index f16af79ccf65..7599b57efdea 100644
--- a/packages/core-js/internals/is-big-int-array.js
+++ b/packages/core-js/internals/is-big-int-array.js
@@ -3,5 +3,5 @@ var classof = require('../internals/classof');
 
 module.exports = function (it) {
   var klass = classof(it);
-  return klass == 'BigInt64Array' || klass == 'BigUint64Array';
+  return klass === 'BigInt64Array' || klass === 'BigUint64Array';
 };
diff --git a/packages/core-js/internals/is-forced.js b/packages/core-js/internals/is-forced.js
index 560221025baa..acd8cc45f1b1 100644
--- a/packages/core-js/internals/is-forced.js
+++ b/packages/core-js/internals/is-forced.js
@@ -6,8 +6,8 @@ var replacement = /#|\.prototype\./;
 
 var isForced = function (feature, detection) {
   var value = data[normalize(feature)];
-  return value == POLYFILL ? true
-    : value == NATIVE ? false
+  return value === POLYFILL ? true
+    : value === NATIVE ? false
     : isCallable(detection) ? fails(detection)
     : !!detection;
 };
diff --git a/packages/core-js/internals/is-regexp.js b/packages/core-js/internals/is-regexp.js
index a29556d2dbbe..a4b287a00d64 100644
--- a/packages/core-js/internals/is-regexp.js
+++ b/packages/core-js/internals/is-regexp.js
@@ -9,5 +9,5 @@ var MATCH = wellKnownSymbol('match');
 // https://tc39.es/ecma262/#sec-isregexp
 module.exports = function (it) {
   var isRegExp;
-  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');
+  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');
 };
diff --git a/packages/core-js/internals/iterator-define.js b/packages/core-js/internals/iterator-define.js
index 1411737c5944..b59a7f779265 100644
--- a/packages/core-js/internals/iterator-define.js
+++ b/packages/core-js/internals/iterator-define.js
@@ -45,7 +45,7 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I
     || IterablePrototype['@@iterator']
     || DEFAULT && IterablePrototype[DEFAULT];
   var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
-  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
+  var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
   var CurrentIteratorPrototype, methods, KEY;
 
   // fix native
@@ -66,7 +66,7 @@ module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, I
   }
 
   // fix Array.prototype.{ values, @@iterator }.name in V8 / FF
-  if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
+  if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {
     if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {
       createNonEnumerableProperty(IterablePrototype, 'name', VALUES);
     } else {
diff --git a/packages/core-js/internals/math-expm1.js b/packages/core-js/internals/math-expm1.js
index 9eccb6a48e48..721edfec6b68 100644
--- a/packages/core-js/internals/math-expm1.js
+++ b/packages/core-js/internals/math-expm1.js
@@ -9,8 +9,8 @@ module.exports = (!$expm1
   // Old FF bug
   || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168
   // Tor Browser bug
-  || $expm1(-2e-17) != -2e-17
+  || $expm1(-2e-17) !== -2e-17
 ) ? function expm1(x) {
   var n = +x;
-  return n == 0 ? n : n > -1e-6 && n < 1e-6 ? n + n * n / 2 : exp(n) - 1;
+  return n === 0 ? n : n > -1e-6 && n < 1e-6 ? n + n * n / 2 : exp(n) - 1;
 } : $expm1;
diff --git a/packages/core-js/internals/math-fround.js b/packages/core-js/internals/math-fround.js
index fad62f2ff8e8..b5e35d3cfb2b 100644
--- a/packages/core-js/internals/math-fround.js
+++ b/packages/core-js/internals/math-fround.js
@@ -24,6 +24,6 @@ module.exports = Math.fround || function fround(x) {
   a = (1 + EPSILON32 / EPSILON) * $abs;
   result = a - (a - $abs);
   // eslint-disable-next-line no-self-compare -- NaN check
-  if (result > MAX32 || result != result) return $sign * Infinity;
+  if (result > MAX32 || result !== result) return $sign * Infinity;
   return $sign * result;
 };
diff --git a/packages/core-js/internals/math-scale.js b/packages/core-js/internals/math-scale.js
index 0eb62165827e..6a9087d94232 100644
--- a/packages/core-js/internals/math-scale.js
+++ b/packages/core-js/internals/math-scale.js
@@ -8,7 +8,7 @@ module.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh)
   var nOutLow = +outLow;
   var nOutHigh = +outHigh;
   // eslint-disable-next-line no-self-compare -- NaN check
-  if (nx != nx || nInLow != nInLow || nInHigh != nInHigh || nOutLow != nOutLow || nOutHigh != nOutHigh) return NaN;
+  if (nx !== nx || nInLow !== nInLow || nInHigh !== nInHigh || nOutLow !== nOutLow || nOutHigh !== nOutHigh) return NaN;
   if (nx === Infinity || nx === -Infinity) return nx;
   return (nx - nInLow) * (nOutHigh - nOutLow) / (nInHigh - nInLow) + nOutLow;
 };
diff --git a/packages/core-js/internals/math-sign.js b/packages/core-js/internals/math-sign.js
index 65c83ab798f0..d59578e8dd0d 100644
--- a/packages/core-js/internals/math-sign.js
+++ b/packages/core-js/internals/math-sign.js
@@ -5,5 +5,5 @@
 module.exports = Math.sign || function sign(x) {
   var n = +x;
   // eslint-disable-next-line no-self-compare -- NaN check
-  return n == 0 || n != n ? n : n < 0 ? -1 : 1;
+  return n === 0 || n !== n ? n : n < 0 ? -1 : 1;
 };
diff --git a/packages/core-js/internals/number-parse-float.js b/packages/core-js/internals/number-parse-float.js
index 0dee63bfd288..f46ab4360137 100644
--- a/packages/core-js/internals/number-parse-float.js
+++ b/packages/core-js/internals/number-parse-float.js
@@ -19,5 +19,5 @@ var FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity
 module.exports = FORCED ? function parseFloat(string) {
   var trimmedString = trim(toString(string));
   var result = $parseFloat(trimmedString);
-  return result === 0 && charAt(trimmedString, 0) == '-' ? -0 : result;
+  return result === 0 && charAt(trimmedString, 0) === '-' ? -0 : result;
 } : $parseFloat;
diff --git a/packages/core-js/internals/numeric-range-iterator.js b/packages/core-js/internals/numeric-range-iterator.js
index 10eef6a256a2..4aae410ea87b 100644
--- a/packages/core-js/internals/numeric-range-iterator.js
+++ b/packages/core-js/internals/numeric-range-iterator.js
@@ -47,7 +47,7 @@ var $RangeIterator = createIteratorConstructor(function NumericRangeIterator(sta
     throw $RangeError(INCORRECT_RANGE);
   }
   // eslint-disable-next-line no-self-compare -- NaN check
-  var hitsEnd = start != start || end != end || step != step || (end > start) !== (step > zero);
+  var hitsEnd = start !== start || end !== end || step !== step || (end > start) !== (step > zero);
   setInternalState(this, {
     type: NUMERIC_RANGE_ITERATOR,
     start: start,
diff --git a/packages/core-js/internals/object-assign.js b/packages/core-js/internals/object-assign.js
index 91076d066beb..de1c6e2686b0 100644
--- a/packages/core-js/internals/object-assign.js
+++ b/packages/core-js/internals/object-assign.js
@@ -36,7 +36,7 @@ module.exports = !$assign || fails(function () {
   var alphabet = 'abcdefghijklmnopqrst';
   A[symbol] = 7;
   alphabet.split('').forEach(function (chr) { B[chr] = chr; });
-  return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;
+  return $assign({}, A)[symbol] !== 7 || objectKeys($assign({}, B)).join('') !== alphabet;
 }) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`
   var T = toObject(target);
   var argumentsLength = arguments.length;
diff --git a/packages/core-js/internals/object-get-own-property-names-external.js b/packages/core-js/internals/object-get-own-property-names-external.js
index 24f5afbe1449..d0187ee25992 100644
--- a/packages/core-js/internals/object-get-own-property-names-external.js
+++ b/packages/core-js/internals/object-get-own-property-names-external.js
@@ -18,7 +18,7 @@ var getWindowNames = function (it) {
 
 // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
 module.exports.f = function getOwnPropertyNames(it) {
-  return windowNames && classof(it) == 'Window'
+  return windowNames && classof(it) === 'Window'
     ? getWindowNames(it)
     : $getOwnPropertyNames(toIndexedObject(it));
 };
diff --git a/packages/core-js/internals/object-is-extensible.js b/packages/core-js/internals/object-is-extensible.js
index fa57ffd0837e..1f3d6288e5d3 100644
--- a/packages/core-js/internals/object-is-extensible.js
+++ b/packages/core-js/internals/object-is-extensible.js
@@ -12,6 +12,6 @@ var FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });
 // https://tc39.es/ecma262/#sec-object.isextensible
 module.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {
   if (!isObject(it)) return false;
-  if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return false;
+  if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return false;
   return $isExtensible ? $isExtensible(it) : true;
 } : $isExtensible;
diff --git a/packages/core-js/internals/parse-json-string.js b/packages/core-js/internals/parse-json-string.js
index 3f077f16f627..8a8055cd7884 100644
--- a/packages/core-js/internals/parse-json-string.js
+++ b/packages/core-js/internals/parse-json-string.js
@@ -29,19 +29,19 @@ module.exports = function (source, i) {
   var value = '';
   while (i < source.length) {
     var chr = at(source, i);
-    if (chr == '\\') {
+    if (chr === '\\') {
       var twoChars = slice(source, i, i + 2);
       if (hasOwn(codePoints, twoChars)) {
         value += codePoints[twoChars];
         i += 2;
-      } else if (twoChars == '\\u') {
+      } else if (twoChars === '\\u') {
         i += 2;
         var fourHexDigits = slice(source, i, i + 4);
         if (!exec(IS_4_HEX_DIGITS, fourHexDigits)) throw $SyntaxError('Bad Unicode escape at: ' + i);
         value += fromCharCode($parseInt(fourHexDigits, 16));
         i += 4;
       } else throw $SyntaxError('Unknown escape sequence: "' + twoChars + '"');
-    } else if (chr == '"') {
+    } else if (chr === '"') {
       unterminated = false;
       i++;
       break;
diff --git a/packages/core-js/internals/same-value-zero.js b/packages/core-js/internals/same-value-zero.js
index 0915f32f03ed..be238571a52a 100644
--- a/packages/core-js/internals/same-value-zero.js
+++ b/packages/core-js/internals/same-value-zero.js
@@ -3,5 +3,5 @@
 // https://tc39.es/ecma262/#sec-samevaluezero
 module.exports = function (x, y) {
   // eslint-disable-next-line no-self-compare -- NaN check
-  return x === y || x != x && y != y;
+  return x === y || x !== x && y !== y;
 };
diff --git a/packages/core-js/internals/same-value.js b/packages/core-js/internals/same-value.js
index 72661ccd4942..7b0d1dd361ef 100644
--- a/packages/core-js/internals/same-value.js
+++ b/packages/core-js/internals/same-value.js
@@ -4,5 +4,5 @@
 // eslint-disable-next-line es/no-object-is -- safe
 module.exports = Object.is || function is(x, y) {
   // eslint-disable-next-line no-self-compare -- NaN check
-  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
+  return x === y ? x !== 0 || 1 / x === 1 / y : x !== x && y !== y;
 };
diff --git a/packages/core-js/internals/schedulers-fix.js b/packages/core-js/internals/schedulers-fix.js
index 2d38413e9499..65ed89c6ef3f 100644
--- a/packages/core-js/internals/schedulers-fix.js
+++ b/packages/core-js/internals/schedulers-fix.js
@@ -11,7 +11,7 @@ var Function = global.Function;
 // dirty IE9- and Bun 0.3.0- checks
 var WRAP = /MSIE .\./.test(USER_AGENT) || ENGINE_IS_BUN && (function () {
   var version = global.Bun.version.split('.');
-  return version.length < 3 || version[0] == 0 && (version[1] < 3 || version[1] == 3 && version[2] == 0);
+  return version.length < 3 || version[0] === '0' && (version[1] < 3 || version[1] === '3' && version[2] === '0');
 })();
 
 // IE9- / Bun 0.3.0- setTimeout / setInterval / setImmediate additional parameters fix
diff --git a/packages/core-js/internals/string-pad.js b/packages/core-js/internals/string-pad.js
index d978d5b2341d..419e904d65a3 100644
--- a/packages/core-js/internals/string-pad.js
+++ b/packages/core-js/internals/string-pad.js
@@ -18,7 +18,7 @@ var createMethod = function (IS_END) {
     var stringLength = S.length;
     var fillStr = fillString === undefined ? ' ' : toString(fillString);
     var fillLen, stringFiller;
-    if (intMaxLength <= stringLength || fillStr == '') return S;
+    if (intMaxLength <= stringLength || fillStr === '') return S;
     fillLen = intMaxLength - stringLength;
     stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length));
     if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen);
diff --git a/packages/core-js/internals/string-punycode-to-ascii.js b/packages/core-js/internals/string-punycode-to-ascii.js
index d0e26501609e..6ebdf7805412 100644
--- a/packages/core-js/internals/string-punycode-to-ascii.js
+++ b/packages/core-js/internals/string-punycode-to-ascii.js
@@ -43,7 +43,7 @@ var ucs2decode = function (string) {
     if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
       // It's a high surrogate, and there is a next character.
       var extra = charCodeAt(string, counter++);
-      if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.
+      if ((extra & 0xFC00) === 0xDC00) { // Low surrogate.
         push(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
       } else {
         // It's an unmatched surrogate; only append this code unit, in case the
@@ -142,7 +142,7 @@ var encode = function (input) {
       if (currentValue < n && ++delta > maxInt) {
         throw $RangeError(OVERFLOW_ERROR);
       }
-      if (currentValue == n) {
+      if (currentValue === n) {
         // Represent delta as a generalized variable-length integer.
         var q = delta;
         var k = base;
@@ -157,7 +157,7 @@ var encode = function (input) {
         }
 
         push(output, fromCharCode(digitToBasic(q)));
-        bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
+        bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);
         delta = 0;
         handledCPCount++;
       }
diff --git a/packages/core-js/internals/string-repeat.js b/packages/core-js/internals/string-repeat.js
index 3f7c08f72b11..c8ae3ed42cf1 100644
--- a/packages/core-js/internals/string-repeat.js
+++ b/packages/core-js/internals/string-repeat.js
@@ -11,7 +11,7 @@ module.exports = function repeat(count) {
   var str = toString(requireObjectCoercible(this));
   var result = '';
   var n = toIntegerOrInfinity(count);
-  if (n < 0 || n == Infinity) throw $RangeError('Wrong number of repetitions');
+  if (n < 0 || n === Infinity) throw $RangeError('Wrong number of repetitions');
   for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;
   return result;
 };
diff --git a/packages/core-js/internals/structured-clone-proper-transfer.js b/packages/core-js/internals/structured-clone-proper-transfer.js
index 156ba91008c2..d2dafb512122 100644
--- a/packages/core-js/internals/structured-clone-proper-transfer.js
+++ b/packages/core-js/internals/structured-clone-proper-transfer.js
@@ -14,5 +14,5 @@ module.exports = !!structuredClone && !fails(function () {
   if ((IS_DENO && V8 > 92) || (IS_NODE && V8 > 94) || (IS_BROWSER && V8 > 97)) return false;
   var buffer = new ArrayBuffer(8);
   var clone = structuredClone(buffer, { transfer: [buffer] });
-  return buffer.byteLength != 0 || clone.byteLength != 8;
+  return buffer.byteLength !== 0 || clone.byteLength !== 8;
 });
diff --git a/packages/core-js/internals/symbol-is-well-known.js b/packages/core-js/internals/symbol-is-well-known.js
index 691b70991f96..50ec53ebf5b2 100644
--- a/packages/core-js/internals/symbol-is-well-known.js
+++ b/packages/core-js/internals/symbol-is-well-known.js
@@ -27,6 +27,7 @@ module.exports = function isWellKnownSymbol(value) {
   try {
     var symbol = thisSymbolValue(value);
     for (var j = 0, keys = getOwnPropertyNames(WellKnownSymbolsStore), keysLength = keys.length; j < keysLength; j++) {
+      // eslint-disable-next-line eqeqeq -- polyfilled symbols case
       if (WellKnownSymbolsStore[keys[j]] == symbol) return true;
     }
   } catch (error) { /* empty */ }
diff --git a/packages/core-js/internals/typed-array-constructor.js b/packages/core-js/internals/typed-array-constructor.js
index 4a20e7e28c2f..13c1f85b25f4 100644
--- a/packages/core-js/internals/typed-array-constructor.js
+++ b/packages/core-js/internals/typed-array-constructor.js
@@ -70,7 +70,7 @@ var addGetter = function (it, key) {
 
 var isArrayBuffer = function (it) {
   var klass;
-  return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';
+  return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) === 'ArrayBuffer' || klass === 'SharedArrayBuffer';
 };
 
 var isTypedArrayIndex = function (target, key) {
@@ -226,7 +226,7 @@ if (DESCRIPTORS) {
       createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);
     }
 
-    var FORCED = TypedArrayConstructor != NativeTypedArrayConstructor;
+    var FORCED = TypedArrayConstructor !== NativeTypedArrayConstructor;
 
     exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;
 
diff --git a/packages/core-js/internals/v8-prototype-define-bug.js b/packages/core-js/internals/v8-prototype-define-bug.js
index 36ee41051486..278d2bf2f580 100644
--- a/packages/core-js/internals/v8-prototype-define-bug.js
+++ b/packages/core-js/internals/v8-prototype-define-bug.js
@@ -9,5 +9,5 @@ module.exports = DESCRIPTORS && fails(function () {
   return Object.defineProperty(function () { /* empty */ }, 'prototype', {
     value: 42,
     writable: false
-  }).prototype != 42;
+  }).prototype !== 42;
 });
diff --git a/packages/core-js/modules/es.array.for-each.js b/packages/core-js/modules/es.array.for-each.js
index 55934d03017f..6f45b51d740b 100644
--- a/packages/core-js/modules/es.array.for-each.js
+++ b/packages/core-js/modules/es.array.for-each.js
@@ -5,6 +5,6 @@ var forEach = require('../internals/array-for-each');
 // `Array.prototype.forEach` method
 // https://tc39.es/ecma262/#sec-array.prototype.foreach
 // eslint-disable-next-line es/no-array-prototype-foreach -- safe
-$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {
+$({ target: 'Array', proto: true, forced: [].forEach !== forEach }, {
   forEach: forEach
 });
diff --git a/packages/core-js/modules/es.array.iterator.js b/packages/core-js/modules/es.array.iterator.js
index 1f68a06c6ae0..0a9e09054edd 100644
--- a/packages/core-js/modules/es.array.iterator.js
+++ b/packages/core-js/modules/es.array.iterator.js
@@ -41,9 +41,10 @@ module.exports = defineIterator(Array, 'Array', function (iterated, kind) {
     state.target = undefined;
     return createIterResultObject(undefined, true);
   }
-  if (kind == 'keys') return createIterResultObject(index, false);
-  if (kind == 'values') return createIterResultObject(target[index], false);
-  return createIterResultObject([index, target[index]], false);
+  switch (kind) {
+    case 'keys': return createIterResultObject(index, false);
+    case 'values': return createIterResultObject(target[index], false);
+  } return createIterResultObject([index, target[index]], false);
 }, 'values');
 
 // argumentsList[@@iterator] is %ArrayProto_values%
diff --git a/packages/core-js/modules/es.array.join.js b/packages/core-js/modules/es.array.join.js
index ee3cb9e6d130..9f2ebf2ad8cb 100644
--- a/packages/core-js/modules/es.array.join.js
+++ b/packages/core-js/modules/es.array.join.js
@@ -7,7 +7,7 @@ var arrayMethodIsStrict = require('../internals/array-method-is-strict');
 
 var nativeJoin = uncurryThis([].join);
 
-var ES3_STRINGS = IndexedObject != Object;
+var ES3_STRINGS = IndexedObject !== Object;
 var FORCED = ES3_STRINGS || !arrayMethodIsStrict('join', ',');
 
 // `Array.prototype.join` method
diff --git a/packages/core-js/modules/es.date.to-string.js b/packages/core-js/modules/es.date.to-string.js
index e5fdae0c8381..32e0d52ffc8a 100644
--- a/packages/core-js/modules/es.date.to-string.js
+++ b/packages/core-js/modules/es.date.to-string.js
@@ -11,7 +11,7 @@ var thisTimeValue = uncurryThis(DatePrototype.getTime);
 
 // `Date.prototype.toString` method
 // https://tc39.es/ecma262/#sec-date.prototype.tostring
-if (String(new Date(NaN)) != INVALID_DATE) {
+if (String(new Date(NaN)) !== INVALID_DATE) {
   defineBuiltIn(DatePrototype, TO_STRING, function toString() {
     var value = thisTimeValue(this);
     // eslint-disable-next-line no-self-compare -- NaN check
diff --git a/packages/core-js/modules/es.json.stringify.js b/packages/core-js/modules/es.json.stringify.js
index 275ef3479932..7d73aa5a00f2 100644
--- a/packages/core-js/modules/es.json.stringify.js
+++ b/packages/core-js/modules/es.json.stringify.js
@@ -26,11 +26,11 @@ var hi = /^[\uDC00-\uDFFF]$/;
 var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {
   var symbol = getBuiltIn('Symbol')();
   // MS Edge converts symbol values to JSON as {}
-  return $stringify([symbol]) != '[null]'
+  return $stringify([symbol]) !== '[null]'
     // WebKit converts symbol values to JSON as null
-    || $stringify({ a: symbol }) != '{}'
+    || $stringify({ a: symbol }) !== '{}'
     // V8 throws on boxed symbols
-    || $stringify(Object(symbol)) != '{}';
+    || $stringify(Object(symbol)) !== '{}';
 });
 
 // https://github.com/tc39/proposal-well-formed-stringify
diff --git a/packages/core-js/modules/es.math.acosh.js b/packages/core-js/modules/es.math.acosh.js
index 555f951dabce..d49bb772e938 100644
--- a/packages/core-js/modules/es.math.acosh.js
+++ b/packages/core-js/modules/es.math.acosh.js
@@ -10,9 +10,9 @@ var LN2 = Math.LN2;
 
 var FORCED = !$acosh
   // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
-  || Math.floor($acosh(Number.MAX_VALUE)) != 710
+  || Math.floor($acosh(Number.MAX_VALUE)) !== 710
   // Tor Browser bug: Math.acosh(Infinity) -> NaN
-  || $acosh(Infinity) != Infinity;
+  || $acosh(Infinity) !== Infinity;
 
 // `Math.acosh` method
 // https://tc39.es/ecma262/#sec-math.acosh
diff --git a/packages/core-js/modules/es.math.asinh.js b/packages/core-js/modules/es.math.asinh.js
index df5cddad0141..0069392e8bad 100644
--- a/packages/core-js/modules/es.math.asinh.js
+++ b/packages/core-js/modules/es.math.asinh.js
@@ -8,7 +8,7 @@ var sqrt = Math.sqrt;
 
 function asinh(x) {
   var n = +x;
-  return !isFinite(n) || n == 0 ? n : n < 0 ? -asinh(-n) : log(n + sqrt(n * n + 1));
+  return !isFinite(n) || n === 0 ? n : n < 0 ? -asinh(-n) : log(n + sqrt(n * n + 1));
 }
 
 var FORCED = !($asinh && 1 / $asinh(0) > 0);
diff --git a/packages/core-js/modules/es.math.atanh.js b/packages/core-js/modules/es.math.atanh.js
index cffa5f158c40..125a1b7a24ce 100644
--- a/packages/core-js/modules/es.math.atanh.js
+++ b/packages/core-js/modules/es.math.atanh.js
@@ -13,6 +13,6 @@ var FORCED = !($atanh && 1 / $atanh(-0) < 0);
 $({ target: 'Math', stat: true, forced: FORCED }, {
   atanh: function atanh(x) {
     var n = +x;
-    return n == 0 ? n : log((1 + n) / (1 - n)) / 2;
+    return n === 0 ? n : log((1 + n) / (1 - n)) / 2;
   }
 });
diff --git a/packages/core-js/modules/es.math.expm1.js b/packages/core-js/modules/es.math.expm1.js
index 1690209c967e..cc9f1747a12c 100644
--- a/packages/core-js/modules/es.math.expm1.js
+++ b/packages/core-js/modules/es.math.expm1.js
@@ -5,4 +5,4 @@ var expm1 = require('../internals/math-expm1');
 // `Math.expm1` method
 // https://tc39.es/ecma262/#sec-math.expm1
 // eslint-disable-next-line es/no-math-expm1 -- required for testing
-$({ target: 'Math', stat: true, forced: expm1 != Math.expm1 }, { expm1: expm1 });
+$({ target: 'Math', stat: true, forced: expm1 !== Math.expm1 }, { expm1: expm1 });
diff --git a/packages/core-js/modules/es.math.imul.js b/packages/core-js/modules/es.math.imul.js
index 5c3c8af9f800..23e73b64fc00 100644
--- a/packages/core-js/modules/es.math.imul.js
+++ b/packages/core-js/modules/es.math.imul.js
@@ -6,7 +6,7 @@ var fails = require('../internals/fails');
 var $imul = Math.imul;
 
 var FORCED = fails(function () {
-  return $imul(0xFFFFFFFF, 5) != -5 || $imul.length != 2;
+  return $imul(0xFFFFFFFF, 5) !== -5 || $imul.length !== 2;
 });
 
 // `Math.imul` method
diff --git a/packages/core-js/modules/es.math.sinh.js b/packages/core-js/modules/es.math.sinh.js
index 25cf0aace0f2..6e80ba07e241 100644
--- a/packages/core-js/modules/es.math.sinh.js
+++ b/packages/core-js/modules/es.math.sinh.js
@@ -9,7 +9,7 @@ var E = Math.E;
 
 var FORCED = fails(function () {
   // eslint-disable-next-line es/no-math-sinh -- required for testing
-  return Math.sinh(-2e-17) != -2e-17;
+  return Math.sinh(-2e-17) !== -2e-17;
 });
 
 // `Math.sinh` method
diff --git a/packages/core-js/modules/es.math.tanh.js b/packages/core-js/modules/es.math.tanh.js
index d37403e532f2..a93da241f8c1 100644
--- a/packages/core-js/modules/es.math.tanh.js
+++ b/packages/core-js/modules/es.math.tanh.js
@@ -11,6 +11,6 @@ $({ target: 'Math', stat: true }, {
     var n = +x;
     var a = expm1(n);
     var b = expm1(-n);
-    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(n) + exp(-n));
+    return a === Infinity ? 1 : b === Infinity ? -1 : (a - b) / (exp(n) + exp(-n));
   }
 });
diff --git a/packages/core-js/modules/es.number.is-nan.js b/packages/core-js/modules/es.number.is-nan.js
index 39b5dceecdbf..d12d708bca2e 100644
--- a/packages/core-js/modules/es.number.is-nan.js
+++ b/packages/core-js/modules/es.number.is-nan.js
@@ -6,6 +6,6 @@ var $ = require('../internals/export');
 $({ target: 'Number', stat: true }, {
   isNaN: function isNaN(number) {
     // eslint-disable-next-line no-self-compare -- NaN check
-    return number != number;
+    return number !== number;
   }
 });
diff --git a/packages/core-js/modules/es.number.parse-float.js b/packages/core-js/modules/es.number.parse-float.js
index 20d551dfc382..754bed778b99 100644
--- a/packages/core-js/modules/es.number.parse-float.js
+++ b/packages/core-js/modules/es.number.parse-float.js
@@ -5,6 +5,6 @@ var parseFloat = require('../internals/number-parse-float');
 // `Number.parseFloat` method
 // https://tc39.es/ecma262/#sec-number.parseFloat
 // eslint-disable-next-line es/no-number-parsefloat -- required for testing
-$({ target: 'Number', stat: true, forced: Number.parseFloat != parseFloat }, {
+$({ target: 'Number', stat: true, forced: Number.parseFloat !== parseFloat }, {
   parseFloat: parseFloat
 });
diff --git a/packages/core-js/modules/es.number.parse-int.js b/packages/core-js/modules/es.number.parse-int.js
index 83274e74f9bf..9cd681382144 100644
--- a/packages/core-js/modules/es.number.parse-int.js
+++ b/packages/core-js/modules/es.number.parse-int.js
@@ -5,6 +5,6 @@ var parseInt = require('../internals/number-parse-int');
 // `Number.parseInt` method
 // https://tc39.es/ecma262/#sec-number.parseint
 // eslint-disable-next-line es/no-number-parseint -- required for testing
-$({ target: 'Number', stat: true, forced: Number.parseInt != parseInt }, {
+$({ target: 'Number', stat: true, forced: Number.parseInt !== parseInt }, {
   parseInt: parseInt
 });
diff --git a/packages/core-js/modules/es.number.to-fixed.js b/packages/core-js/modules/es.number.to-fixed.js
index 5930e48c3c03..c7b7c99a5ab1 100644
--- a/packages/core-js/modules/es.number.to-fixed.js
+++ b/packages/core-js/modules/es.number.to-fixed.js
@@ -85,7 +85,7 @@ $({ target: 'Number', proto: true, forced: FORCED }, {
     // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation
     if (fractDigits < 0 || fractDigits > 20) throw $RangeError('Incorrect fraction digits');
     // eslint-disable-next-line no-self-compare -- NaN check
-    if (number != number) return 'NaN';
+    if (number !== number) return 'NaN';
     if (number <= -1e21 || number >= 1e21) return $String(number);
     if (number < 0) {
       sign = '-';
diff --git a/packages/core-js/modules/es.object.is-frozen.js b/packages/core-js/modules/es.object.is-frozen.js
index 8fdd6f05da1c..4cd6ddb2a92b 100644
--- a/packages/core-js/modules/es.object.is-frozen.js
+++ b/packages/core-js/modules/es.object.is-frozen.js
@@ -15,7 +15,7 @@ var FORCED = ARRAY_BUFFER_NON_EXTENSIBLE || fails(function () { $isFrozen(1); })
 $({ target: 'Object', stat: true, forced: FORCED }, {
   isFrozen: function isFrozen(it) {
     if (!isObject(it)) return true;
-    if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return true;
+    if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return true;
     return $isFrozen ? $isFrozen(it) : false;
   }
 });
diff --git a/packages/core-js/modules/es.object.is-sealed.js b/packages/core-js/modules/es.object.is-sealed.js
index 72e2de79723b..cf3a787ff374 100644
--- a/packages/core-js/modules/es.object.is-sealed.js
+++ b/packages/core-js/modules/es.object.is-sealed.js
@@ -15,7 +15,7 @@ var FORCED = ARRAY_BUFFER_NON_EXTENSIBLE || fails(function () { $isSealed(1); })
 $({ target: 'Object', stat: true, forced: FORCED }, {
   isSealed: function isSealed(it) {
     if (!isObject(it)) return true;
-    if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return true;
+    if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return true;
     return $isSealed ? $isSealed(it) : false;
   }
 });
diff --git a/packages/core-js/modules/es.parse-float.js b/packages/core-js/modules/es.parse-float.js
index bd1ec523550c..109e0751ea91 100644
--- a/packages/core-js/modules/es.parse-float.js
+++ b/packages/core-js/modules/es.parse-float.js
@@ -4,6 +4,6 @@ var $parseFloat = require('../internals/number-parse-float');
 
 // `parseFloat` method
 // https://tc39.es/ecma262/#sec-parsefloat-string
-$({ global: true, forced: parseFloat != $parseFloat }, {
+$({ global: true, forced: parseFloat !== $parseFloat }, {
   parseFloat: $parseFloat
 });
diff --git a/packages/core-js/modules/es.parse-int.js b/packages/core-js/modules/es.parse-int.js
index e9d6d7291672..7422a73ed28c 100644
--- a/packages/core-js/modules/es.parse-int.js
+++ b/packages/core-js/modules/es.parse-int.js
@@ -4,6 +4,6 @@ var $parseInt = require('../internals/number-parse-int');
 
 // `parseInt` method
 // https://tc39.es/ecma262/#sec-parseint-string-radix
-$({ global: true, forced: parseInt != $parseInt }, {
+$({ global: true, forced: parseInt !== $parseInt }, {
   parseInt: $parseInt
 });
diff --git a/packages/core-js/modules/es.promise.constructor.js b/packages/core-js/modules/es.promise.constructor.js
index e82feb3a5978..3468f7cfcc20 100644
--- a/packages/core-js/modules/es.promise.constructor.js
+++ b/packages/core-js/modules/es.promise.constructor.js
@@ -57,7 +57,7 @@ var isThenable = function (it) {
 
 var callReaction = function (reaction, state) {
   var value = state.value;
-  var ok = state.state == FULFILLED;
+  var ok = state.state === FULFILLED;
   var handler = ok ? reaction.ok : reaction.fail;
   var resolve = reaction.resolve;
   var reject = reaction.reject;
@@ -233,7 +233,7 @@ if (FORCED_PROMISE_CONSTRUCTOR) {
     reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;
     reaction.fail = isCallable(onRejected) && onRejected;
     reaction.domain = IS_NODE ? process.domain : undefined;
-    if (state.state == PENDING) state.reactions.add(reaction);
+    if (state.state === PENDING) state.reactions.add(reaction);
     else microtask(function () {
       callReaction(reaction, state);
     });
diff --git a/packages/core-js/modules/es.reflect.construct.js b/packages/core-js/modules/es.reflect.construct.js
index 632b0efb77b8..d2283e396621 100644
--- a/packages/core-js/modules/es.reflect.construct.js
+++ b/packages/core-js/modules/es.reflect.construct.js
@@ -34,7 +34,7 @@ $({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {
     anObject(args);
     var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);
     if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);
-    if (Target == newTarget) {
+    if (Target === newTarget) {
       // w/o altered newTarget, optimization for 0-4 arguments
       switch (args.length) {
         case 0: return new Target();
diff --git a/packages/core-js/modules/es.regexp.constructor.js b/packages/core-js/modules/es.regexp.constructor.js
index 2f4bc1379923..1f1ce0dc74aa 100644
--- a/packages/core-js/modules/es.regexp.constructor.js
+++ b/packages/core-js/modules/es.regexp.constructor.js
@@ -45,7 +45,7 @@ var BASE_FORCED = DESCRIPTORS &&
   (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {
     re2[MATCH] = false;
     // RegExp constructor can alter flags and IsRegExp works correct with @@match
-    return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';
+    return NativeRegExp(re1) !== re1 || NativeRegExp(re2) === re2 || String(NativeRegExp(re1, 'i')) !== '/a/i';
   }));
 
 var handleDotAll = function (string) {
diff --git a/packages/core-js/modules/es.regexp.to-string.js b/packages/core-js/modules/es.regexp.to-string.js
index 66f701b5a0b5..763b7e7d3eb9 100644
--- a/packages/core-js/modules/es.regexp.to-string.js
+++ b/packages/core-js/modules/es.regexp.to-string.js
@@ -10,9 +10,9 @@ var TO_STRING = 'toString';
 var RegExpPrototype = RegExp.prototype;
 var nativeToString = RegExpPrototype[TO_STRING];
 
-var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });
+var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) !== '/a/b'; });
 // FF44- RegExp#toString has a wrong name
-var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name != TO_STRING;
+var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING;
 
 // `RegExp.prototype.toString` method
 // https://tc39.es/ecma262/#sec-regexp.prototype.tostring
diff --git a/packages/core-js/modules/es.string.from-code-point.js b/packages/core-js/modules/es.string.from-code-point.js
index 73e87a8135a5..9d7bfa44fa6d 100644
--- a/packages/core-js/modules/es.string.from-code-point.js
+++ b/packages/core-js/modules/es.string.from-code-point.js
@@ -10,7 +10,7 @@ var $fromCodePoint = String.fromCodePoint;
 var join = uncurryThis([].join);
 
 // length should be 1, old FF problem
-var INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length != 1;
+var INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length !== 1;
 
 // `String.fromCodePoint` method
 // https://tc39.es/ecma262/#sec-string.fromcodepoint
diff --git a/packages/core-js/modules/es.string.is-well-formed.js b/packages/core-js/modules/es.string.is-well-formed.js
index 7c77f380d414..5fbdfa8101f8 100644
--- a/packages/core-js/modules/es.string.is-well-formed.js
+++ b/packages/core-js/modules/es.string.is-well-formed.js
@@ -15,9 +15,9 @@ $({ target: 'String', proto: true }, {
     for (var i = 0; i < length; i++) {
       var charCode = charCodeAt(S, i);
       // single UTF-16 code unit
-      if ((charCode & 0xF800) != 0xD800) continue;
+      if ((charCode & 0xF800) !== 0xD800) continue;
       // unpaired surrogate
-      if (charCode >= 0xDC00 || ++i >= length || (charCodeAt(S, i) & 0xFC00) != 0xDC00) return false;
+      if (charCode >= 0xDC00 || ++i >= length || (charCodeAt(S, i) & 0xFC00) !== 0xDC00) return false;
     } return true;
   }
 });
diff --git a/packages/core-js/modules/es.string.match-all.js b/packages/core-js/modules/es.string.match-all.js
index a01381b40eb3..3584dbfb19ef 100644
--- a/packages/core-js/modules/es.string.match-all.js
+++ b/packages/core-js/modules/es.string.match-all.js
@@ -90,7 +90,7 @@ $({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, {
       }
       if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll(O, regexp);
       matcher = getMethod(regexp, MATCH_ALL);
-      if (matcher === undefined && IS_PURE && classof(regexp) == 'RegExp') matcher = $matchAll;
+      if (matcher === undefined && IS_PURE && classof(regexp) === 'RegExp') matcher = $matchAll;
       if (matcher) return call(matcher, regexp, O);
     } else if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll(O, regexp);
     S = toString(O);
diff --git a/packages/core-js/modules/es.string.split.js b/packages/core-js/modules/es.string.split.js
index 2d51c61dea25..3c2a9142551d 100644
--- a/packages/core-js/modules/es.string.split.js
+++ b/packages/core-js/modules/es.string.split.js
@@ -41,11 +41,11 @@ var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {
 fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {
   var internalSplit;
   if (
-    'abbc'.split(/(b)*/)[1] == 'c' ||
+    'abbc'.split(/(b)*/)[1] === 'c' ||
     // eslint-disable-next-line regexp/no-empty-group -- required for testing
-    'test'.split(/(?:)/, -1).length != 4 ||
-    'ab'.split(/(?:ab)*/).length != 2 ||
-    '.'.split(/(.?)(.?)/).length != 4 ||
+    'test'.split(/(?:)/, -1).length !== 4 ||
+    'ab'.split(/(?:ab)*/).length !== 2 ||
+    '.'.split(/(.?)(.?)/).length !== 4 ||
     // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing
     '.'.split(/()()/).length > 1 ||
     ''.split(/.?/).length
diff --git a/packages/core-js/modules/es.string.to-well-formed.js b/packages/core-js/modules/es.string.to-well-formed.js
index 8a7a46b02389..58ea953eade7 100644
--- a/packages/core-js/modules/es.string.to-well-formed.js
+++ b/packages/core-js/modules/es.string.to-well-formed.js
@@ -30,9 +30,9 @@ $({ target: 'String', proto: true, forced: TO_STRING_CONVERSION_BUG }, {
     for (var i = 0; i < length; i++) {
       var charCode = charCodeAt(S, i);
       // single UTF-16 code unit
-      if ((charCode & 0xF800) != 0xD800) result[i] = charAt(S, i);
+      if ((charCode & 0xF800) !== 0xD800) result[i] = charAt(S, i);
       // unpaired surrogate
-      else if (charCode >= 0xDC00 || i + 1 >= length || (charCodeAt(S, i + 1) & 0xFC00) != 0xDC00) result[i] = REPLACEMENT_CHARACTER;
+      else if (charCode >= 0xDC00 || i + 1 >= length || (charCodeAt(S, i + 1) & 0xFC00) !== 0xDC00) result[i] = REPLACEMENT_CHARACTER;
       // surrogate pair
       else {
         result[i] = charAt(S, i);
diff --git a/packages/core-js/modules/es.symbol.constructor.js b/packages/core-js/modules/es.symbol.constructor.js
index aad7637c12da..9450fdfc6375 100644
--- a/packages/core-js/modules/es.symbol.constructor.js
+++ b/packages/core-js/modules/es.symbol.constructor.js
@@ -66,7 +66,7 @@ var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChil
 var setSymbolDescriptor = DESCRIPTORS && fails(function () {
   return nativeObjectCreate(nativeDefineProperty({}, 'a', {
     get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }
-  })).a != 7;
+  })).a !== 7;
 }) ? function (O, P, Attributes) {
   var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
   if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
diff --git a/packages/core-js/modules/es.symbol.description.js b/packages/core-js/modules/es.symbol.description.js
index b486d31eb4d5..ce2863fd6976 100644
--- a/packages/core-js/modules/es.symbol.description.js
+++ b/packages/core-js/modules/es.symbol.description.js
@@ -35,7 +35,7 @@ if (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototy
   SymbolWrapper.prototype = SymbolPrototype;
   SymbolPrototype.constructor = SymbolWrapper;
 
-  var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';
+  var NATIVE_SYMBOL = String(NativeSymbol('test')) === 'Symbol(test)';
   var thisSymbolValue = uncurryThis(SymbolPrototype.valueOf);
   var symbolDescriptiveString = uncurryThis(SymbolPrototype.toString);
   var regexp = /^Symbol\((.*)\)[^)]+$/;
diff --git a/packages/core-js/modules/es.typed-array.to-locale-string.js b/packages/core-js/modules/es.typed-array.to-locale-string.js
index f3baf21a1502..32e6c2fbc562 100644
--- a/packages/core-js/modules/es.typed-array.to-locale-string.js
+++ b/packages/core-js/modules/es.typed-array.to-locale-string.js
@@ -16,7 +16,7 @@ var TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {
 });
 
 var FORCED = fails(function () {
-  return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();
+  return [1, 2].toLocaleString() !== new Int8Array([1, 2]).toLocaleString();
 }) || !fails(function () {
   Int8Array.prototype.toLocaleString.call([1, 2]);
 });
diff --git a/packages/core-js/modules/es.typed-array.to-string.js b/packages/core-js/modules/es.typed-array.to-string.js
index 3f1d24fcf385..735a527276d4 100644
--- a/packages/core-js/modules/es.typed-array.to-string.js
+++ b/packages/core-js/modules/es.typed-array.to-string.js
@@ -15,7 +15,7 @@ if (fails(function () { arrayToString.call({}); })) {
   };
 }
 
-var IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;
+var IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString !== arrayToString;
 
 // `%TypedArray%.prototype.toString` method
 // https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring
diff --git a/packages/core-js/modules/es.weak-map.constructor.js b/packages/core-js/modules/es.weak-map.constructor.js
index 72632c4b5624..e278ab54165d 100644
--- a/packages/core-js/modules/es.weak-map.constructor.js
+++ b/packages/core-js/modules/es.weak-map.constructor.js
@@ -101,8 +101,8 @@ if (NATIVE_WEAK_MAP) if (IS_IE11) {
         else if (isSealed(key)) arrayIntegrityLevel = SEALED;
       }
       nativeSet(this, key, value);
-      if (arrayIntegrityLevel == FROZEN) freeze(key);
-      if (arrayIntegrityLevel == SEALED) seal(key);
+      if (arrayIntegrityLevel === FROZEN) freeze(key);
+      if (arrayIntegrityLevel === SEALED) seal(key);
       return this;
     }
   });
diff --git a/packages/core-js/modules/esnext.array.last-index.js b/packages/core-js/modules/esnext.array.last-index.js
index d3d6fc6df9e0..48d49977ef0a 100644
--- a/packages/core-js/modules/esnext.array.last-index.js
+++ b/packages/core-js/modules/esnext.array.last-index.js
@@ -14,7 +14,7 @@ if (DESCRIPTORS) {
     get: function lastIndex() {
       var O = toObject(this);
       var len = lengthOfArrayLike(O);
-      return len == 0 ? 0 : len - 1;
+      return len === 0 ? 0 : len - 1;
     }
   });
 
diff --git a/packages/core-js/modules/esnext.array.last-item.js b/packages/core-js/modules/esnext.array.last-item.js
index 9cedec08f497..c1704cbf05ec 100644
--- a/packages/core-js/modules/esnext.array.last-item.js
+++ b/packages/core-js/modules/esnext.array.last-item.js
@@ -14,12 +14,12 @@ if (DESCRIPTORS) {
     get: function lastItem() {
       var O = toObject(this);
       var len = lengthOfArrayLike(O);
-      return len == 0 ? undefined : O[len - 1];
+      return len === 0 ? undefined : O[len - 1];
     },
     set: function lastItem(value) {
       var O = toObject(this);
       var len = lengthOfArrayLike(O);
-      return O[len == 0 ? 0 : len - 1] = value;
+      return O[len === 0 ? 0 : len - 1] = value;
     }
   });
 
diff --git a/packages/core-js/modules/esnext.async-disposable-stack.constructor.js b/packages/core-js/modules/esnext.async-disposable-stack.constructor.js
index 539181b01854..80e3c179f02e 100644
--- a/packages/core-js/modules/esnext.async-disposable-stack.constructor.js
+++ b/packages/core-js/modules/esnext.async-disposable-stack.constructor.js
@@ -29,7 +29,7 @@ var PENDING = 'pending';
 
 var getPendingAsyncDisposableStackInternalState = function (stack) {
   var internalState = getAsyncDisposableStackInternalState(stack);
-  if (internalState.state == DISPOSED) throw $ReferenceError(ASYNC_DISPOSABLE_STACK + ' already disposed');
+  if (internalState.state === DISPOSED) throw $ReferenceError(ASYNC_DISPOSABLE_STACK + ' already disposed');
   return internalState;
 };
 
@@ -50,7 +50,7 @@ defineBuiltIns(AsyncDisposableStackPrototype, {
     var asyncDisposableStack = this;
     return new Promise(function (resolve, reject) {
       var internalState = getAsyncDisposableStackInternalState(asyncDisposableStack);
-      if (internalState.state == DISPOSED) return resolve(undefined);
+      if (internalState.state === DISPOSED) return resolve(undefined);
       internalState.state = DISPOSED;
       if (!DESCRIPTORS) asyncDisposableStack.disposed = true;
       var stack = internalState.stack;
@@ -118,7 +118,7 @@ defineBuiltIns(AsyncDisposableStackPrototype, {
 if (DESCRIPTORS) defineBuiltInAccessor(AsyncDisposableStackPrototype, 'disposed', {
   configurable: true,
   get: function disposed() {
-    return getAsyncDisposableStackInternalState(this).state == DISPOSED;
+    return getAsyncDisposableStackInternalState(this).state === DISPOSED;
   }
 });
 
diff --git a/packages/core-js/modules/esnext.composite-symbol.js b/packages/core-js/modules/esnext.composite-symbol.js
index 4381977d7d4e..93f5a08b8e7d 100644
--- a/packages/core-js/modules/esnext.composite-symbol.js
+++ b/packages/core-js/modules/esnext.composite-symbol.js
@@ -7,7 +7,7 @@ var apply = require('../internals/function-apply');
 // https://github.com/tc39/proposal-richer-keys/tree/master/compositeKey
 $({ global: true, forced: true }, {
   compositeSymbol: function compositeSymbol() {
-    if (arguments.length == 1 && typeof arguments[0] == 'string') return getBuiltIn('Symbol')['for'](arguments[0]);
+    if (arguments.length === 1 && typeof arguments[0] == 'string') return getBuiltIn('Symbol')['for'](arguments[0]);
     return apply(getCompositeKeyNode, null, arguments).get('symbol', getBuiltIn('Symbol'));
   }
 });
diff --git a/packages/core-js/modules/esnext.disposable-stack.constructor.js b/packages/core-js/modules/esnext.disposable-stack.constructor.js
index a8d488e7d98e..2023cbe4be54 100644
--- a/packages/core-js/modules/esnext.disposable-stack.constructor.js
+++ b/packages/core-js/modules/esnext.disposable-stack.constructor.js
@@ -28,7 +28,7 @@ var PENDING = 'pending';
 
 var getPendingDisposableStackInternalState = function (stack) {
   var internalState = getDisposableStackInternalState(stack);
-  if (internalState.state == DISPOSED) throw $ReferenceError(DISPOSABLE_STACK + ' already disposed');
+  if (internalState.state === DISPOSED) throw $ReferenceError(DISPOSABLE_STACK + ' already disposed');
   return internalState;
 };
 
@@ -47,7 +47,7 @@ var DisposableStackPrototype = $DisposableStack.prototype;
 defineBuiltIns(DisposableStackPrototype, {
   dispose: function dispose() {
     var internalState = getDisposableStackInternalState(this);
-    if (internalState.state == DISPOSED) return;
+    if (internalState.state === DISPOSED) return;
     internalState.state = DISPOSED;
     if (!DESCRIPTORS) this.disposed = true;
     var stack = internalState.stack;
@@ -102,7 +102,7 @@ defineBuiltIns(DisposableStackPrototype, {
 if (DESCRIPTORS) defineBuiltInAccessor(DisposableStackPrototype, 'disposed', {
   configurable: true,
   get: function disposed() {
-    return getDisposableStackInternalState(this).state == DISPOSED;
+    return getDisposableStackInternalState(this).state === DISPOSED;
   }
 });
 
diff --git a/packages/core-js/modules/esnext.json.parse.js b/packages/core-js/modules/esnext.json.parse.js
index e418d7c4a7fc..e343678410fb 100644
--- a/packages/core-js/modules/esnext.json.parse.js
+++ b/packages/core-js/modules/esnext.json.parse.js
@@ -132,7 +132,7 @@ Context.prototype = {
     var nodes = {};
     while (i < source.length) {
       i = this.until(['"', '}'], i);
-      if (at(source, i) == '}' && !expectKeypair) {
+      if (at(source, i) === '}' && !expectKeypair) {
         i++;
         break;
       }
@@ -148,10 +148,10 @@ Context.prototype = {
       createProperty(object, key, result.value);
       i = this.until([',', '}'], result.end);
       var chr = at(source, i);
-      if (chr == ',') {
+      if (chr === ',') {
         expectKeypair = true;
         i++;
-      } else if (chr == '}') {
+      } else if (chr === '}') {
         i++;
         break;
       }
@@ -166,7 +166,7 @@ Context.prototype = {
     var nodes = [];
     while (i < source.length) {
       i = this.skip(IS_WHITESPACE, i);
-      if (at(source, i) == ']' && !expectElement) {
+      if (at(source, i) === ']' && !expectElement) {
         i++;
         break;
       }
@@ -174,10 +174,10 @@ Context.prototype = {
       push(nodes, result);
       push(array, result.value);
       i = this.until([',', ']'], result.end);
-      if (at(source, i) == ',') {
+      if (at(source, i) === ',') {
         expectElement = true;
         i++;
-      } else if (at(source, i) == ']') {
+      } else if (at(source, i) === ']') {
         i++;
         break;
       }
@@ -193,17 +193,17 @@ Context.prototype = {
     var source = this.source;
     var startIndex = this.index;
     var i = startIndex;
-    if (at(source, i) == '-') i++;
-    if (at(source, i) == '0') i++;
+    if (at(source, i) === '-') i++;
+    if (at(source, i) === '0') i++;
     else if (exec(IS_NON_ZERO_DIGIT, at(source, i))) i = this.skip(IS_DIGIT, ++i);
     else throw SyntaxError('Failed to parse number at: ' + i);
-    if (at(source, i) == '.') i = this.skip(IS_DIGIT, ++i);
-    if (at(source, i) == 'e' || at(source, i) == 'E') {
+    if (at(source, i) === '.') i = this.skip(IS_DIGIT, ++i);
+    if (at(source, i) === 'e' || at(source, i) === 'E') {
       i++;
-      if (at(source, i) == '+' || at(source, i) == '-') i++;
+      if (at(source, i) === '+' || at(source, i) === '-') i++;
       var exponentStartIndex = i;
       i = this.skip(IS_DIGIT, i);
-      if (exponentStartIndex == i) throw SyntaxError("Failed to parse number's exponent value at: " + i);
+      if (exponentStartIndex === i) throw SyntaxError("Failed to parse number's exponent value at: " + i);
     }
     return this.node(PRIMITIVE, Number(slice(source, startIndex, i)), startIndex, i);
   },
@@ -211,7 +211,7 @@ Context.prototype = {
     var keyword = '' + value;
     var index = this.index;
     var endIndex = index + keyword.length;
-    if (slice(this.source, index, endIndex) != keyword) throw SyntaxError('Failed to parse value at: ' + index);
+    if (slice(this.source, index, endIndex) !== keyword) throw SyntaxError('Failed to parse value at: ' + index);
     return this.node(PRIMITIVE, value, index, endIndex);
   },
   skip: function (regex, i) {
@@ -222,7 +222,7 @@ Context.prototype = {
   until: function (array, i) {
     i = this.skip(IS_WHITESPACE, i);
     var chr = at(this.source, i);
-    for (var j = 0; j < array.length; j++) if (array[j] == chr) return i;
+    for (var j = 0; j < array.length; j++) if (array[j] === chr) return i;
     throw SyntaxError('Unexpected character: "' + chr + '" at: ' + i);
   }
 };
diff --git a/packages/core-js/modules/esnext.json.raw-json.js b/packages/core-js/modules/esnext.json.raw-json.js
index f5bdb0d40996..48cbf4222ec1 100644
--- a/packages/core-js/modules/esnext.json.raw-json.js
+++ b/packages/core-js/modules/esnext.json.raw-json.js
@@ -36,7 +36,7 @@ var IS_WHITESPACE = /^[\t\n\r ]$/;
 $({ target: 'JSON', stat: true, forced: !NATIVE_RAW_JSON }, {
   rawJSON: function rawJSON(text) {
     var jsonString = toString(text);
-    if (jsonString == '' || exec(IS_WHITESPACE, at(jsonString, 0)) || exec(IS_WHITESPACE, at(jsonString, jsonString.length - 1))) {
+    if (jsonString === '' || exec(IS_WHITESPACE, at(jsonString, 0)) || exec(IS_WHITESPACE, at(jsonString, jsonString.length - 1))) {
       throw $SyntaxError(ERROR_MESSAGE);
     }
     var parsed = parse(jsonString);
@@ -69,10 +69,10 @@ if ($stringify) $({ target: 'JSON', stat: true, arity: 3, forced: !NATIVE_RAW_JS
 
     for (var i = 0; i < length; i++) {
       var chr = at(json, i);
-      if (chr == '"') {
+      if (chr === '"') {
         var end = parseJSONString(json, ++i).end - 1;
         var string = slice(json, i, end);
-        result += slice(string, 0, MARK_LENGTH) == MARK
+        result += slice(string, 0, MARK_LENGTH) === MARK
           ? rawStrings[slice(string, MARK_LENGTH)]
           : '"' + string + '"';
         i = end;
diff --git a/packages/core-js/modules/esnext.math.signbit.js b/packages/core-js/modules/esnext.math.signbit.js
index 8a4a138ab780..1d4cad0c691f 100644
--- a/packages/core-js/modules/esnext.math.signbit.js
+++ b/packages/core-js/modules/esnext.math.signbit.js
@@ -7,6 +7,6 @@ $({ target: 'Math', stat: true, forced: true }, {
   signbit: function signbit(x) {
     var n = +x;
     // eslint-disable-next-line no-self-compare -- NaN check
-    return n == n && n == 0 ? 1 / n == -Infinity : n < 0;
+    return n === n && n === 0 ? 1 / n === -Infinity : n < 0;
   }
 });
diff --git a/packages/core-js/modules/esnext.number.from-string.js b/packages/core-js/modules/esnext.number.from-string.js
index 98dfa80d2416..de649a42e2bd 100644
--- a/packages/core-js/modules/esnext.number.from-string.js
+++ b/packages/core-js/modules/esnext.number.from-string.js
@@ -23,7 +23,7 @@ $({ target: 'Number', stat: true, forced: true }, {
     var R, mathNum;
     if (typeof string != 'string') throw $TypeError(INVALID_NUMBER_REPRESENTATION);
     if (!string.length) throw $SyntaxError(INVALID_NUMBER_REPRESENTATION);
-    if (charAt(string, 0) == '-') {
+    if (charAt(string, 0) === '-') {
       sign = -1;
       string = stringSlice(string, 1);
       if (!string.length) throw $SyntaxError(INVALID_NUMBER_REPRESENTATION);
diff --git a/packages/core-js/modules/esnext.set.intersection.v2.js b/packages/core-js/modules/esnext.set.intersection.v2.js
index 01f107247fdb..fdca772c952e 100644
--- a/packages/core-js/modules/esnext.set.intersection.v2.js
+++ b/packages/core-js/modules/esnext.set.intersection.v2.js
@@ -6,7 +6,7 @@ var setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');
 
 var INCORRECT = !setMethodAcceptSetLike('intersection') || fails(function () {
   // eslint-disable-next-line es/no-array-from, es/no-set -- testing
-  return Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2]))) != '3,2';
+  return Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2]))) !== '3,2';
 });
 
 // `Set.prototype.intersection` method
diff --git a/packages/core-js/modules/web.atob.js b/packages/core-js/modules/web.atob.js
index 8be71fb81fa9..038801bfe930 100644
--- a/packages/core-js/modules/web.atob.js
+++ b/packages/core-js/modules/web.atob.js
@@ -46,10 +46,10 @@ $({ global: true, bind: true, enumerable: true, forced: NO_SPACES_IGNORE || NO_E
     var position = 0;
     var bc = 0;
     var chr, bs;
-    if (string.length % 4 == 0) {
+    if (string.length % 4 === 0) {
       string = replace(string, finalEq, '');
     }
-    if (string.length % 4 == 1 || exec(disallowed, string)) {
+    if (string.length % 4 === 1 || exec(disallowed, string)) {
       throw new (getBuiltIn('DOMException'))('The string is not correctly encoded', 'InvalidCharacterError');
     }
     while (chr = charAt(string, position++)) {
diff --git a/packages/core-js/modules/web.dom-exception.constructor.js b/packages/core-js/modules/web.dom-exception.constructor.js
index e2c638d95ba3..84afb42392c7 100644
--- a/packages/core-js/modules/web.dom-exception.constructor.js
+++ b/packages/core-js/modules/web.dom-exception.constructor.js
@@ -30,7 +30,7 @@ var NativeDOMException = getBuiltIn(DOM_EXCEPTION) || (function () {
     // eslint-disable-next-line es/no-weak-map, unicorn/require-post-message-target-origin -- safe
     new MessageChannel().port1.postMessage(new WeakMap());
   } catch (error) {
-    if (error.name == DATA_CLONE_ERR && error.code == 25) return error.constructor;
+    if (error.name === DATA_CLONE_ERR && error.code === 25) return error.constructor;
   }
 })();
 var NativeDOMExceptionPrototype = NativeDOMException && NativeDOMException.prototype;
diff --git a/packages/core-js/modules/web.structured-clone.js b/packages/core-js/modules/web.structured-clone.js
index 3483cb452eb0..cc0797082944 100644
--- a/packages/core-js/modules/web.structured-clone.js
+++ b/packages/core-js/modules/web.structured-clone.js
@@ -62,7 +62,7 @@ var checkBasicSemantic = function (structuredCloneImplementation) {
     var set1 = new global.Set([7]);
     var set2 = structuredCloneImplementation(set1);
     var number = structuredCloneImplementation(Object(7));
-    return set2 == set1 || !set2.has(7) || typeof number != 'object' || number != 7;
+    return set2 === set1 || !set2.has(7) || typeof number != 'object' || number !== 7;
   }) && structuredCloneImplementation;
 };
 
@@ -78,7 +78,7 @@ var checkErrorsCloning = function (structuredCloneImplementation, $Error) {
 var checkNewErrorsCloningSemantic = function (structuredCloneImplementation) {
   return !fails(function () {
     var test = structuredCloneImplementation(new global.AggregateError([1], PERFORMANCE_MARK, { cause: 3 }));
-    return test.name != 'AggregateError' || test.errors[0] != 1 || test.message != PERFORMANCE_MARK || test.cause != 3;
+    return test.name !== 'AggregateError' || test.errors[0] !== 1 || test.message !== PERFORMANCE_MARK || test.cause !== 3;
   });
 };
 
@@ -440,7 +440,7 @@ var structuredCloneInternal = function (value, map, transferredBuffers) {
       if (hasOwn(value, 'cause')) {
         createNonEnumerableProperty(cloned, 'cause', structuredCloneInternal(value.cause, map, transferredBuffers));
       }
-      if (name == 'AggregateError') {
+      if (name === 'AggregateError') {
         cloned.errors = structuredCloneInternal(value.errors, map, transferredBuffers);
       } // break omitted
     case 'DOMException':
@@ -508,7 +508,7 @@ var replacePlaceholders = function (value, map) {
       if (hasOwn(value, 'cause')) {
         value.cause = replacePlaceholders(value.cause, map);
       }
-      if (value.name == 'AggregateError') {
+      if (value.name === 'AggregateError') {
         value.errors = replacePlaceholders(value.errors, map);
       } // break omitted
     case 'DOMException':
diff --git a/packages/core-js/modules/web.url.constructor.js b/packages/core-js/modules/web.url.constructor.js
index 5cf2f5e2c6de..e7a336f207fe 100644
--- a/packages/core-js/modules/web.url.constructor.js
+++ b/packages/core-js/modules/web.url.constructor.js
@@ -71,7 +71,7 @@ var EOF;
 var parseIPv4 = function (input) {
   var parts = split(input, '.');
   var partsLength, numbers, index, part, radix, number, ipv4;
-  if (parts.length && parts[parts.length - 1] == '') {
+  if (parts.length && parts[parts.length - 1] === '') {
     parts.length--;
   }
   partsLength = parts.length;
@@ -79,23 +79,23 @@ var parseIPv4 = function (input) {
   numbers = [];
   for (index = 0; index < partsLength; index++) {
     part = parts[index];
-    if (part == '') return input;
+    if (part === '') return input;
     radix = 10;
-    if (part.length > 1 && charAt(part, 0) == '0') {
+    if (part.length > 1 && charAt(part, 0) === '0') {
       radix = exec(HEX_START, part) ? 16 : 8;
-      part = stringSlice(part, radix == 8 ? 1 : 2);
+      part = stringSlice(part, radix === 8 ? 1 : 2);
     }
     if (part === '') {
       number = 0;
     } else {
-      if (!exec(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;
+      if (!exec(radix === 10 ? DEC : radix === 8 ? OCT : HEX, part)) return input;
       number = parseInt(part, radix);
     }
     push(numbers, number);
   }
   for (index = 0; index < partsLength; index++) {
     number = numbers[index];
-    if (index == partsLength - 1) {
+    if (index === partsLength - 1) {
       if (number >= pow(256, 5 - partsLength)) return null;
     } else if (number > 255) return null;
   }
@@ -119,15 +119,15 @@ var parseIPv6 = function (input) {
     return charAt(input, pointer);
   };
 
-  if (chr() == ':') {
-    if (charAt(input, 1) != ':') return;
+  if (chr() === ':') {
+    if (charAt(input, 1) !== ':') return;
     pointer += 2;
     pieceIndex++;
     compress = pieceIndex;
   }
   while (chr()) {
-    if (pieceIndex == 8) return;
-    if (chr() == ':') {
+    if (pieceIndex === 8) return;
+    if (chr() === ':') {
       if (compress !== null) return;
       pointer++;
       pieceIndex++;
@@ -140,33 +140,33 @@ var parseIPv6 = function (input) {
       pointer++;
       length++;
     }
-    if (chr() == '.') {
-      if (length == 0) return;
+    if (chr() === '.') {
+      if (length === 0) return;
       pointer -= length;
       if (pieceIndex > 6) return;
       numbersSeen = 0;
       while (chr()) {
         ipv4Piece = null;
         if (numbersSeen > 0) {
-          if (chr() == '.' && numbersSeen < 4) pointer++;
+          if (chr() === '.' && numbersSeen < 4) pointer++;
           else return;
         }
         if (!exec(DIGIT, chr())) return;
         while (exec(DIGIT, chr())) {
           number = parseInt(chr(), 10);
           if (ipv4Piece === null) ipv4Piece = number;
-          else if (ipv4Piece == 0) return;
+          else if (ipv4Piece === 0) return;
           else ipv4Piece = ipv4Piece * 10 + number;
           if (ipv4Piece > 255) return;
           pointer++;
         }
         address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;
         numbersSeen++;
-        if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;
+        if (numbersSeen === 2 || numbersSeen === 4) pieceIndex++;
       }
-      if (numbersSeen != 4) return;
+      if (numbersSeen !== 4) return;
       break;
-    } else if (chr() == ':') {
+    } else if (chr() === ':') {
       pointer++;
       if (!chr()) return;
     } else if (chr()) return;
@@ -175,12 +175,12 @@ var parseIPv6 = function (input) {
   if (compress !== null) {
     swaps = pieceIndex - compress;
     pieceIndex = 7;
-    while (pieceIndex != 0 && swaps > 0) {
+    while (pieceIndex !== 0 && swaps > 0) {
       swap = address[pieceIndex];
       address[pieceIndex--] = address[compress + swaps - 1];
       address[compress + --swaps] = swap;
     }
-  } else if (pieceIndex != 8) return;
+  } else if (pieceIndex !== 8) return;
   return address;
 };
 
@@ -268,15 +268,15 @@ var specialSchemes = {
 // https://url.spec.whatwg.org/#windows-drive-letter
 var isWindowsDriveLetter = function (string, normalized) {
   var second;
-  return string.length == 2 && exec(ALPHA, charAt(string, 0))
-    && ((second = charAt(string, 1)) == ':' || (!normalized && second == '|'));
+  return string.length === 2 && exec(ALPHA, charAt(string, 0))
+    && ((second = charAt(string, 1)) === ':' || (!normalized && second === '|'));
 };
 
 // https://url.spec.whatwg.org/#start-with-a-windows-drive-letter
 var startsWithWindowsDriveLetter = function (string) {
   var third;
   return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (
-    string.length == 2 ||
+    string.length === 2 ||
     ((third = charAt(string, 2)) === '/' || third === '\\' || third === '?' || third === '#')
   );
 };
@@ -380,27 +380,27 @@ URLState.prototype = {
           break;
 
         case SCHEME:
-          if (chr && (exec(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {
+          if (chr && (exec(ALPHANUMERIC, chr) || chr === '+' || chr === '-' || chr === '.')) {
             buffer += toLowerCase(chr);
-          } else if (chr == ':') {
+          } else if (chr === ':') {
             if (stateOverride && (
-              (url.isSpecial() != hasOwn(specialSchemes, buffer)) ||
-              (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||
-              (url.scheme == 'file' && !url.host)
+              (url.isSpecial() !== hasOwn(specialSchemes, buffer)) ||
+              (buffer === 'file' && (url.includesCredentials() || url.port !== null)) ||
+              (url.scheme === 'file' && !url.host)
             )) return;
             url.scheme = buffer;
             if (stateOverride) {
-              if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;
+              if (url.isSpecial() && specialSchemes[url.scheme] === url.port) url.port = null;
               return;
             }
             buffer = '';
-            if (url.scheme == 'file') {
+            if (url.scheme === 'file') {
               state = FILE;
-            } else if (url.isSpecial() && base && base.scheme == url.scheme) {
+            } else if (url.isSpecial() && base && base.scheme === url.scheme) {
               state = SPECIAL_RELATIVE_OR_AUTHORITY;
             } else if (url.isSpecial()) {
               state = SPECIAL_AUTHORITY_SLASHES;
-            } else if (codePoints[pointer + 1] == '/') {
+            } else if (codePoints[pointer + 1] === '/') {
               state = PATH_OR_AUTHORITY;
               pointer++;
             } else {
@@ -417,8 +417,8 @@ URLState.prototype = {
           break;
 
         case NO_SCHEME:
-          if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;
-          if (base.cannotBeABaseURL && chr == '#') {
+          if (!base || (base.cannotBeABaseURL && chr !== '#')) return INVALID_SCHEME;
+          if (base.cannotBeABaseURL && chr === '#') {
             url.scheme = base.scheme;
             url.path = arraySlice(base.path);
             url.query = base.query;
@@ -427,11 +427,11 @@ URLState.prototype = {
             state = FRAGMENT;
             break;
           }
-          state = base.scheme == 'file' ? FILE : RELATIVE;
+          state = base.scheme === 'file' ? FILE : RELATIVE;
           continue;
 
         case SPECIAL_RELATIVE_OR_AUTHORITY:
-          if (chr == '/' && codePoints[pointer + 1] == '/') {
+          if (chr === '/' && codePoints[pointer + 1] === '/') {
             state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
             pointer++;
           } else {
@@ -440,7 +440,7 @@ URLState.prototype = {
           } break;
 
         case PATH_OR_AUTHORITY:
-          if (chr == '/') {
+          if (chr === '/') {
             state = AUTHORITY;
             break;
           } else {
@@ -450,16 +450,16 @@ URLState.prototype = {
 
         case RELATIVE:
           url.scheme = base.scheme;
-          if (chr == EOF) {
+          if (chr === EOF) {
             url.username = base.username;
             url.password = base.password;
             url.host = base.host;
             url.port = base.port;
             url.path = arraySlice(base.path);
             url.query = base.query;
-          } else if (chr == '/' || (chr == '\\' && url.isSpecial())) {
+          } else if (chr === '/' || (chr === '\\' && url.isSpecial())) {
             state = RELATIVE_SLASH;
-          } else if (chr == '?') {
+          } else if (chr === '?') {
             url.username = base.username;
             url.password = base.password;
             url.host = base.host;
@@ -467,7 +467,7 @@ URLState.prototype = {
             url.path = arraySlice(base.path);
             url.query = '';
             state = QUERY;
-          } else if (chr == '#') {
+          } else if (chr === '#') {
             url.username = base.username;
             url.password = base.password;
             url.host = base.host;
@@ -488,9 +488,9 @@ URLState.prototype = {
           } break;
 
         case RELATIVE_SLASH:
-          if (url.isSpecial() && (chr == '/' || chr == '\\')) {
+          if (url.isSpecial() && (chr === '/' || chr === '\\')) {
             state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
-          } else if (chr == '/') {
+          } else if (chr === '/') {
             state = AUTHORITY;
           } else {
             url.username = base.username;
@@ -503,24 +503,24 @@ URLState.prototype = {
 
         case SPECIAL_AUTHORITY_SLASHES:
           state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
-          if (chr != '/' || charAt(buffer, pointer + 1) != '/') continue;
+          if (chr !== '/' || charAt(buffer, pointer + 1) !== '/') continue;
           pointer++;
           break;
 
         case SPECIAL_AUTHORITY_IGNORE_SLASHES:
-          if (chr != '/' && chr != '\\') {
+          if (chr !== '/' && chr !== '\\') {
             state = AUTHORITY;
             continue;
           } break;
 
         case AUTHORITY:
-          if (chr == '@') {
+          if (chr === '@') {
             if (seenAt) buffer = '%40' + buffer;
             seenAt = true;
             bufferCodePoints = arrayFrom(buffer);
             for (var i = 0; i < bufferCodePoints.length; i++) {
               var codePoint = bufferCodePoints[i];
-              if (codePoint == ':' && !seenPasswordToken) {
+              if (codePoint === ':' && !seenPasswordToken) {
                 seenPasswordToken = true;
                 continue;
               }
@@ -530,10 +530,10 @@ URLState.prototype = {
             }
             buffer = '';
           } else if (
-            chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
-            (chr == '\\' && url.isSpecial())
+            chr === EOF || chr === '/' || chr === '?' || chr === '#' ||
+            (chr === '\\' && url.isSpecial())
           ) {
-            if (seenAt && buffer == '') return INVALID_AUTHORITY;
+            if (seenAt && buffer === '') return INVALID_AUTHORITY;
             pointer -= arrayFrom(buffer).length + 1;
             buffer = '';
             state = HOST;
@@ -542,22 +542,22 @@ URLState.prototype = {
 
         case HOST:
         case HOSTNAME:
-          if (stateOverride && url.scheme == 'file') {
+          if (stateOverride && url.scheme === 'file') {
             state = FILE_HOST;
             continue;
-          } else if (chr == ':' && !seenBracket) {
-            if (buffer == '') return INVALID_HOST;
+          } else if (chr === ':' && !seenBracket) {
+            if (buffer === '') return INVALID_HOST;
             failure = url.parseHost(buffer);
             if (failure) return failure;
             buffer = '';
             state = PORT;
-            if (stateOverride == HOSTNAME) return;
+            if (stateOverride === HOSTNAME) return;
           } else if (
-            chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
-            (chr == '\\' && url.isSpecial())
+            chr === EOF || chr === '/' || chr === '?' || chr === '#' ||
+            (chr === '\\' && url.isSpecial())
           ) {
-            if (url.isSpecial() && buffer == '') return INVALID_HOST;
-            if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;
+            if (url.isSpecial() && buffer === '') return INVALID_HOST;
+            if (stateOverride && buffer === '' && (url.includesCredentials() || url.port !== null)) return;
             failure = url.parseHost(buffer);
             if (failure) return failure;
             buffer = '';
@@ -565,8 +565,8 @@ URLState.prototype = {
             if (stateOverride) return;
             continue;
           } else {
-            if (chr == '[') seenBracket = true;
-            else if (chr == ']') seenBracket = false;
+            if (chr === '[') seenBracket = true;
+            else if (chr === ']') seenBracket = false;
             buffer += chr;
           } break;
 
@@ -574,11 +574,11 @@ URLState.prototype = {
           if (exec(DIGIT, chr)) {
             buffer += chr;
           } else if (
-            chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
-            (chr == '\\' && url.isSpecial()) ||
+            chr === EOF || chr === '/' || chr === '?' || chr === '#' ||
+            (chr === '\\' && url.isSpecial()) ||
             stateOverride
           ) {
-            if (buffer != '') {
+            if (buffer !== '') {
               var port = parseInt(buffer, 10);
               if (port > 0xFFFF) return INVALID_PORT;
               url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;
@@ -592,31 +592,35 @@ URLState.prototype = {
 
         case FILE:
           url.scheme = 'file';
-          if (chr == '/' || chr == '\\') state = FILE_SLASH;
-          else if (base && base.scheme == 'file') {
-            if (chr == EOF) {
-              url.host = base.host;
-              url.path = arraySlice(base.path);
-              url.query = base.query;
-            } else if (chr == '?') {
-              url.host = base.host;
-              url.path = arraySlice(base.path);
-              url.query = '';
-              state = QUERY;
-            } else if (chr == '#') {
-              url.host = base.host;
-              url.path = arraySlice(base.path);
-              url.query = base.query;
-              url.fragment = '';
-              state = FRAGMENT;
-            } else {
-              if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {
+          if (chr === '/' || chr === '\\') state = FILE_SLASH;
+          else if (base && base.scheme === 'file') {
+            switch (chr) {
+              case EOF:
                 url.host = base.host;
                 url.path = arraySlice(base.path);
-                url.shortenPath();
-              }
-              state = PATH;
-              continue;
+                url.query = base.query;
+                break;
+              case '?':
+                url.host = base.host;
+                url.path = arraySlice(base.path);
+                url.query = '';
+                state = QUERY;
+                break;
+              case '#':
+                url.host = base.host;
+                url.path = arraySlice(base.path);
+                url.query = base.query;
+                url.fragment = '';
+                state = FRAGMENT;
+                break;
+              default:
+                if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {
+                  url.host = base.host;
+                  url.path = arraySlice(base.path);
+                  url.shortenPath();
+                }
+                state = PATH;
+                continue;
             }
           } else {
             state = PATH;
@@ -624,11 +628,11 @@ URLState.prototype = {
           } break;
 
         case FILE_SLASH:
-          if (chr == '/' || chr == '\\') {
+          if (chr === '/' || chr === '\\') {
             state = FILE_HOST;
             break;
           }
-          if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {
+          if (base && base.scheme === 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {
             if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);
             else url.host = base.host;
           }
@@ -636,17 +640,17 @@ URLState.prototype = {
           continue;
 
         case FILE_HOST:
-          if (chr == EOF || chr == '/' || chr == '\\' || chr == '?' || chr == '#') {
+          if (chr === EOF || chr === '/' || chr === '\\' || chr === '?' || chr === '#') {
             if (!stateOverride && isWindowsDriveLetter(buffer)) {
               state = PATH;
-            } else if (buffer == '') {
+            } else if (buffer === '') {
               url.host = '';
               if (stateOverride) return;
               state = PATH_START;
             } else {
               failure = url.parseHost(buffer);
               if (failure) return failure;
-              if (url.host == 'localhost') url.host = '';
+              if (url.host === 'localhost') url.host = '';
               if (stateOverride) return;
               buffer = '';
               state = PATH_START;
@@ -657,50 +661,50 @@ URLState.prototype = {
         case PATH_START:
           if (url.isSpecial()) {
             state = PATH;
-            if (chr != '/' && chr != '\\') continue;
-          } else if (!stateOverride && chr == '?') {
+            if (chr !== '/' && chr !== '\\') continue;
+          } else if (!stateOverride && chr === '?') {
             url.query = '';
             state = QUERY;
-          } else if (!stateOverride && chr == '#') {
+          } else if (!stateOverride && chr === '#') {
             url.fragment = '';
             state = FRAGMENT;
-          } else if (chr != EOF) {
+          } else if (chr !== EOF) {
             state = PATH;
-            if (chr != '/') continue;
+            if (chr !== '/') continue;
           } break;
 
         case PATH:
           if (
-            chr == EOF || chr == '/' ||
-            (chr == '\\' && url.isSpecial()) ||
-            (!stateOverride && (chr == '?' || chr == '#'))
+            chr === EOF || chr === '/' ||
+            (chr === '\\' && url.isSpecial()) ||
+            (!stateOverride && (chr === '?' || chr === '#'))
           ) {
             if (isDoubleDot(buffer)) {
               url.shortenPath();
-              if (chr != '/' && !(chr == '\\' && url.isSpecial())) {
+              if (chr !== '/' && !(chr === '\\' && url.isSpecial())) {
                 push(url.path, '');
               }
             } else if (isSingleDot(buffer)) {
-              if (chr != '/' && !(chr == '\\' && url.isSpecial())) {
+              if (chr !== '/' && !(chr === '\\' && url.isSpecial())) {
                 push(url.path, '');
               }
             } else {
-              if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {
+              if (url.scheme === 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {
                 if (url.host) url.host = '';
                 buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter
               }
               push(url.path, buffer);
             }
             buffer = '';
-            if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {
+            if (url.scheme === 'file' && (chr === EOF || chr === '?' || chr === '#')) {
               while (url.path.length > 1 && url.path[0] === '') {
                 shift(url.path);
               }
             }
-            if (chr == '?') {
+            if (chr === '?') {
               url.query = '';
               state = QUERY;
-            } else if (chr == '#') {
+            } else if (chr === '#') {
               url.fragment = '';
               state = FRAGMENT;
             }
@@ -709,28 +713,28 @@ URLState.prototype = {
           } break;
 
         case CANNOT_BE_A_BASE_URL_PATH:
-          if (chr == '?') {
+          if (chr === '?') {
             url.query = '';
             state = QUERY;
-          } else if (chr == '#') {
+          } else if (chr === '#') {
             url.fragment = '';
             state = FRAGMENT;
-          } else if (chr != EOF) {
+          } else if (chr !== EOF) {
             url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);
           } break;
 
         case QUERY:
-          if (!stateOverride && chr == '#') {
+          if (!stateOverride && chr === '#') {
             url.fragment = '';
             state = FRAGMENT;
-          } else if (chr != EOF) {
-            if (chr == "'" && url.isSpecial()) url.query += '%27';
-            else if (chr == '#') url.query += '%23';
+          } else if (chr !== EOF) {
+            if (chr === "'" && url.isSpecial()) url.query += '%27';
+            else if (chr === '#') url.query += '%23';
             else url.query += percentEncode(chr, C0ControlPercentEncodeSet);
           } break;
 
         case FRAGMENT:
-          if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);
+          if (chr !== EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);
           break;
       }
 
@@ -740,8 +744,8 @@ URLState.prototype = {
   // https://url.spec.whatwg.org/#host-parsing
   parseHost: function (input) {
     var result, codePoints, index;
-    if (charAt(input, 0) == '[') {
-      if (charAt(input, input.length - 1) != ']') return INVALID_HOST;
+    if (charAt(input, 0) === '[') {
+      if (charAt(input, input.length - 1) !== ']') return INVALID_HOST;
       result = parseIPv6(stringSlice(input, 1, -1));
       if (!result) return INVALID_HOST;
       this.host = result;
@@ -764,11 +768,11 @@ URLState.prototype = {
   },
   // https://url.spec.whatwg.org/#cannot-have-a-username-password-port
   cannotHaveUsernamePasswordPort: function () {
-    return !this.host || this.cannotBeABaseURL || this.scheme == 'file';
+    return !this.host || this.cannotBeABaseURL || this.scheme === 'file';
   },
   // https://url.spec.whatwg.org/#include-credentials
   includesCredentials: function () {
-    return this.username != '' || this.password != '';
+    return this.username !== '' || this.password !== '';
   },
   // https://url.spec.whatwg.org/#is-special
   isSpecial: function () {
@@ -778,7 +782,7 @@ URLState.prototype = {
   shortenPath: function () {
     var path = this.path;
     var pathSize = path.length;
-    if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {
+    if (pathSize && (this.scheme !== 'file' || pathSize !== 1 || !isWindowsDriveLetter(path[0], true))) {
       path.length--;
     }
   },
@@ -801,7 +805,7 @@ URLState.prototype = {
       }
       output += serializeHost(host);
       if (port !== null) output += ':' + port;
-    } else if (scheme == 'file') output += '//';
+    } else if (scheme === 'file') output += '//';
     output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';
     if (query !== null) output += '?' + query;
     if (fragment !== null) output += '#' + fragment;
@@ -817,12 +821,12 @@ URLState.prototype = {
   getOrigin: function () {
     var scheme = this.scheme;
     var port = this.port;
-    if (scheme == 'blob') try {
+    if (scheme === 'blob') try {
       return new URLConstructor(scheme.path[0]).origin;
     } catch (error) {
       return 'null';
     }
-    if (scheme == 'file' || !this.isSpecial()) return 'null';
+    if (scheme === 'file' || !this.isSpecial()) return 'null';
     return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');
   },
   // https://url.spec.whatwg.org/#dom-url-protocol
@@ -885,7 +889,7 @@ URLState.prototype = {
   setPort: function (port) {
     if (this.cannotHaveUsernamePasswordPort()) return;
     port = $toString(port);
-    if (port == '') this.port = null;
+    if (port === '') this.port = null;
     else this.parse(port, PORT);
   },
   // https://url.spec.whatwg.org/#dom-url-pathname
@@ -905,10 +909,10 @@ URLState.prototype = {
   },
   setSearch: function (search) {
     search = $toString(search);
-    if (search == '') {
+    if (search === '') {
       this.query = null;
     } else {
-      if ('?' == charAt(search, 0)) search = stringSlice(search, 1);
+      if ('?' === charAt(search, 0)) search = stringSlice(search, 1);
       this.query = '';
       this.parse(search, QUERY);
     }
@@ -925,11 +929,11 @@ URLState.prototype = {
   },
   setHash: function (hash) {
     hash = $toString(hash);
-    if (hash == '') {
+    if (hash === '') {
       this.fragment = null;
       return;
     }
-    if ('#' == charAt(hash, 0)) hash = stringSlice(hash, 1);
+    if ('#' === charAt(hash, 0)) hash = stringSlice(hash, 1);
     this.fragment = '';
     this.parse(hash, FRAGMENT);
   },
diff --git a/scripts/check-compat-data-mapping.mjs b/scripts/check-compat-data-mapping.mjs
index 84b7c2e2e915..b176ff327838 100644
--- a/scripts/check-compat-data-mapping.mjs
+++ b/scripts/check-compat-data-mapping.mjs
@@ -67,7 +67,7 @@ assert(modernV8ToChrome(v8) <= latest(mapping.ChromeToNode)[0], 'NodeJS');
 assert(latest(Object.entries(electron))[0] <= latest(mapping.ChromeToElectron)[0], 'Electron');
 assert(modernV8ToChrome(deno.engine) <= latest(mapping.ChromeToDeno)[0], 'Deno');
 assert(oculus.engine <= latest(mapping.ChromeAndroidToQuest)[0], 'Meta Quest');
-assert(opera.version == mapping.ChromeToOpera(opera.engine), 'Opera');
+assert(opera.version === String(mapping.ChromeToOpera(opera.engine)), 'Opera');
 assert(operaAndroid.engine <= latest(mapping.ChromeAndroidToOperaAndroid)[0], 'Opera for Android');
 assert(ios.version === Object.entries(safari).find(([, { engine_version: engine }]) => engine === ios.engine)[0], 'iOS Safari');
 assert(samsung.engine <= latest(mapping.ChromeAndroidToSamsung)[0], 'Samsung Internet');
diff --git a/tests/compat/tests.js b/tests/compat/tests.js
index 306e1ec9b392..5a09a7033649 100644
--- a/tests/compat/tests.js
+++ b/tests/compat/tests.js
@@ -44,14 +44,14 @@ var WEBKIT_STRING_PAD_BUG = /Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\
 var DESCRIPTORS_SUPPORT = function () {
   return Object.defineProperty({}, 'a', {
     get: function () { return 7; }
-  }).a == 7;
+  }).a === 7;
 };
 
 var V8_PROTOTYPE_DEFINE_BUG = function () {
   return Object.defineProperty(function () { /* empty */ }, 'prototype', {
     value: 42,
     writable: false
-  }).prototype == 42;
+  }).prototype === 42;
 };
 
 var PROMISES_SUPPORT = function () {
@@ -184,8 +184,8 @@ var TYPED_ARRAY_CONSTRUCTORS_NOT_REQUIRES_WRAPPERS = function () {
     return this;
   };
 
-  return new Int8Array(iterable)[0] == 1
-    && new Int8Array(new ArrayBuffer(2), 1, undefined).length == 1;
+  return new Int8Array(iterable)[0] === 1
+    && new Int8Array(new ArrayBuffer(2), 1, undefined).length === 1;
 };
 
 function NCG_SUPPORT() {
@@ -211,7 +211,7 @@ function createIsRegExpLogicTest(name) {
 function createStringHTMLMethodTest(METHOD_NAME) {
   return function () {
     var test = ''[METHOD_NAME]('"');
-    return test == test.toLowerCase() && test.split('"').length <= 3;
+    return test === test.toLowerCase() && test.split('"').length <= 3;
   };
 }
 
@@ -266,14 +266,14 @@ function NATIVE_RAW_JSON() {
 function IMMEDIATE() {
   return setImmediate && clearImmediate && !(IS_BUN && (function () {
     var version = global.Bun.version.split('.');
-    return version.length < 3 || version[0] == 0 && (version[1] < 3 || version[1] == 3 && version[2] == 0);
+    return version.length < 3 || version[0] === '0' && (version[1] < 3 || version[1] === '3' && version[2] === '0');
   })());
 }
 
 function TIMERS() {
   return !(/MSIE .\./.test(USERAGENT) || IS_BUN && (function () {
     var version = global.Bun.version.split('.');
-    return version.length < 3 || version[0] == 0 && (version[1] < 3 || version[1] == 3 && version[2] == 0);
+    return version.length < 3 || version[0] === '0' && (version[1] < 3 || version[1] === '3' && version[2] === '0');
   })());
 }
 
@@ -283,15 +283,15 @@ GLOBAL.tests = {
     return Object.getOwnPropertySymbols('qwe')
       && Symbol['for']
       && Symbol.keyFor
-      && JSON.stringify([Symbol()]) == '[null]'
-      && JSON.stringify({ a: Symbol() }) == '{}'
-      && JSON.stringify(Object(Symbol())) == '{}'
+      && JSON.stringify([Symbol()]) === '[null]'
+      && JSON.stringify({ a: Symbol() }) === '{}'
+      && JSON.stringify(Object(Symbol())) === '{}'
       && Symbol.prototype[Symbol.toPrimitive]
       && Symbol.prototype[Symbol.toStringTag];
   }],
   'es.symbol.constructor': SYMBOLS_SUPPORT,
   'es.symbol.description': function () {
-    return Symbol('foo').description == 'foo' && Symbol().description === undefined;
+    return Symbol('foo').description === 'foo' && Symbol().description === undefined;
   },
   'es.symbol.async-iterator': function () {
     return Symbol.asyncIterator;
@@ -604,7 +604,7 @@ GLOBAL.tests = {
     new ArrayBuffer();
     new ArrayBuffer(1.5);
     new ArrayBuffer(NaN);
-    return ArrayBuffer.length == 1 && ArrayBuffer.name == 'ArrayBuffer';
+    return ArrayBuffer.length === 1 && ArrayBuffer.name === 'ArrayBuffer';
   }],
   'es.array-buffer.is-view': [ARRAY_BUFFER_VIEWS_SUPPORT, function () {
     return ArrayBuffer.isView;
@@ -630,7 +630,7 @@ GLOBAL.tests = {
     try {
       new Date(NaN).toISOString();
     } catch (error) {
-      return new Date(-5e13 - 1).toISOString() == '0385-07-25T07:06:39.999Z';
+      return new Date(-5e13 - 1).toISOString() === '0385-07-25T07:06:39.999Z';
     }
   },
   'es.date.to-json': function () {
@@ -642,7 +642,7 @@ GLOBAL.tests = {
   }],
   // TODO: Remove from `core-js@4`
   'es.date.to-string': function () {
-    return new Date(NaN).toString() == 'Invalid Date';
+    return new Date(NaN).toString() === 'Invalid Date';
   },
   'es.escape': function () {
     return escape;
@@ -662,9 +662,9 @@ GLOBAL.tests = {
     return globalThis;
   },
   'es.json.stringify': [SYMBOLS_SUPPORT, function () {
-    return JSON.stringify([Symbol()]) == '[null]'
-      && JSON.stringify({ a: Symbol() }) == '{}'
-      && JSON.stringify(Object(Symbol())) == '{}'
+    return JSON.stringify([Symbol()]) === '[null]'
+      && JSON.stringify({ a: Symbol() }) === '{}'
+      && JSON.stringify(Object(Symbol())) === '{}'
       && JSON.stringify('\uDF06\uD834') === '"\\udf06\\ud834"'
       && JSON.stringify('\uDEAD') === '"\\udead"';
   }],
@@ -685,16 +685,16 @@ GLOBAL.tests = {
     var map = new Map(iterable);
     return map.forEach
       && map[Symbol.iterator]().next()
-      && map.get(1) == 2
-      && map.set(-0, 3) == map
+      && map.get(1) === 2
+      && map.set(-0, 3) === map
       && map.has(0)
       && map[Symbol.toStringTag];
   }],
   'es.math.acosh': function () {
     // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
-    return Math.floor(Math.acosh(Number.MAX_VALUE)) == 710
+    return Math.floor(Math.acosh(Number.MAX_VALUE)) === 710
       // Tor Browser bug: Math.acosh(Infinity) -> NaN
-      && Math.acosh(Infinity) == Infinity;
+      && Math.acosh(Infinity) === Infinity;
   },
   'es.math.asinh': function () {
     return 1 / Math.asinh(0) > 0;
@@ -715,7 +715,7 @@ GLOBAL.tests = {
     // Old FF bug
     return Math.expm1(10) <= 22025.465794806719 && Math.expm1(10) >= 22025.4657948067165168
       // Tor Browser bug
-      && Math.expm1(-2e-17) == -2e-17;
+      && Math.expm1(-2e-17) === -2e-17;
   },
   'es.math.fround': function () {
     return Math.fround;
@@ -724,7 +724,7 @@ GLOBAL.tests = {
     return Math.hypot && Math.hypot(Infinity, NaN) === Infinity;
   },
   'es.math.imul': function () {
-    return Math.imul(0xFFFFFFFF, 5) == -5 && Math.imul.length == 2;
+    return Math.imul(0xFFFFFFFF, 5) === -5 && Math.imul.length === 2;
   },
   'es.math.log10': function () {
     return Math.log10;
@@ -739,7 +739,7 @@ GLOBAL.tests = {
     return Math.sign;
   },
   'es.math.sinh': function () {
-    return Math.sinh(-2e-17) == -2e-17;
+    return Math.sinh(-2e-17) === -2e-17;
   },
   'es.math.tanh': function () {
     return Math.tanh;
@@ -839,7 +839,7 @@ GLOBAL.tests = {
     var alphabet = 'abcdefghijklmnopqrst';
     A[symbol] = 7;
     alphabet.split('').forEach(function (chr) { B[chr] = chr; });
-    return Object.assign({}, A)[symbol] == 7 && Object.keys(Object.assign({}, B)).join('') == alphabet;
+    return Object.assign({}, A)[symbol] === 7 && Object.keys(Object.assign({}, B)).join('') === alphabet;
   },
   // TODO: Remove from `core-js@4`
   'es.object.create': function () {
@@ -1015,7 +1015,7 @@ GLOBAL.tests = {
     return new RegExp(re1) !== re1
       && RegExp(re1) === re1
       && RegExp(re2) !== re2
-      && RegExp(re1, 'i') == '/a/i'
+      && String(RegExp(re1, 'i')) === '/a/i'
       && new RegExp('a', 'y') // just check that it doesn't throw
       && RegExp('.', 's').exec('\n')
       && RegExp[Symbol.species];
@@ -1108,7 +1108,7 @@ GLOBAL.tests = {
     return set.forEach
       && set[Symbol.iterator]().next()
       && set.has(1)
-      && set.add(-0) == set
+      && set.add(-0) === set
       && set.has(0)
       && set[Symbol.toStringTag];
   }],
@@ -1139,7 +1139,7 @@ GLOBAL.tests = {
     re[Symbol.match]('');
 
     // eslint-disable-next-line regexp/prefer-regexp-exec -- required for testing
-    return ''.match(O) == 7 && execCalled;
+    return ''.match(O) === 7 && execCalled;
   },
   'es.string.match-all': function () {
     try {
@@ -1177,7 +1177,7 @@ GLOBAL.tests = {
       return result;
     };
 
-    return ''.replace(O) == 7
+    return ''.replace(O) === 7
       && execCalled
       // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive
       && ''.replace(re2, '$<a>') === '7'
@@ -1197,7 +1197,7 @@ GLOBAL.tests = {
     re.exec = function () { execCalled = true; return null; };
     re[Symbol.search]('');
 
-    return ''.search(O) == 7 && execCalled;
+    return ''.search(O) === 7 && execCalled;
   },
   'es.string.split': function () {
     var O = {};
@@ -1216,7 +1216,7 @@ GLOBAL.tests = {
     re2.exec = function () { return originalExec.apply(this, arguments); };
     var result = 'ab'.split(re2);
 
-    return ''.split(O) == 7 && execCalled && result.length === 2 && result[0] === 'a' && result[1] === 'b';
+    return ''.split(O) === 7 && execCalled && result.length === 2 && result[0] === 'a' && result[1] === 'b';
   },
   'es.string.starts-with': createIsRegExpLogicTest('startsWith'),
   'es.string.substr': function () {
@@ -1414,11 +1414,11 @@ GLOBAL.tests = {
     try {
       Int8Array.prototype.toLocaleString.call([1, 2]);
     } catch (error) {
-      return [1, 2].toLocaleString() == new Int8Array([1, 2]).toLocaleString();
+      return [1, 2].toLocaleString() === new Int8Array([1, 2]).toLocaleString();
     }
   }],
   'es.typed-array.to-string': [ARRAY_BUFFER_VIEWS_SUPPORT, function () {
-    return Int8Array.prototype.toString == Array.prototype.toString;
+    return Int8Array.prototype.toString === Array.prototype.toString;
   }],
   'es.typed-array.to-reversed': function () {
     return Int8Array.prototype.toReversed;
@@ -1450,9 +1450,9 @@ GLOBAL.tests = {
 
     var map = new WeakMap(iterable);
     // MS IE bug
-    return map.get(key) == 1
-      && map.get(null) == undefined
-      && map.set({}, 2) == map
+    return map.get(key) === 1
+      && map.get(null) === undefined
+      && map.set({}, 2) === map
       && map[Symbol.toStringTag]
       // MS Edge bug
       && Object.isFrozen(key);
@@ -1472,7 +1472,7 @@ GLOBAL.tests = {
     var set = new WeakSet(iterable);
     return set.has(key)
       && !set.has(null)
-      && set.add({}) == set
+      && set.add({}) === set
       && set[Symbol.toStringTag];
   }],
   'esnext.suppressed-error.constructor': function () {
@@ -1779,7 +1779,7 @@ GLOBAL.tests = {
     return Set.from;
   },
   'esnext.set.intersection.v2': [createSetMethodTest('intersection'), function () {
-    return Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2]))) == '3,2';
+    return Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2]))) === '3,2';
   }],
   'esnext.set.is-disjoint-from.v2': createSetMethodTest('isDisjointFrom'),
   'esnext.set.is-subset-of.v2': createSetMethodTest('isSubsetOf'),
@@ -1975,7 +1975,7 @@ GLOBAL.tests = {
 
     function checkNewErrorsCloningSemantic(structuredCloneImplementation) {
       var test = structuredCloneImplementation(new AggregateError([1], 'message', { cause: 3 }));
-      return test.name == 'AggregateError' && test.errors[0] == 1 && test.message == 'message' && test.cause == 3;
+      return test.name === 'AggregateError' && test.errors[0] === 1 && test.message === 'message' && test.cause === 3;
     }
 
     return checkErrorsCloning(structuredClone, Error)
diff --git a/tests/eslint/eslint.config.js b/tests/eslint/eslint.config.js
index cb23e7e1e964..f835d483d506 100644
--- a/tests/eslint/eslint.config.js
+++ b/tests/eslint/eslint.config.js
@@ -104,6 +104,8 @@ const base = {
   'dot-notation': [ERROR, { allowKeywords: true }],
   // enforce newline before and after dot
   'dot-location': [ERROR, 'property'],
+  // require the use of === and !==
+  eqeqeq: [ERROR, 'smart'],
   // disallow use of arguments.caller or arguments.callee
   'no-caller': ERROR,
   // disallow lexical declarations in case/default clauses
diff --git a/tests/helpers/helpers.js b/tests/helpers/helpers.js
index 8e25a6844aa0..31f3897b4364 100644
--- a/tests/helpers/helpers.js
+++ b/tests/helpers/helpers.js
@@ -4,7 +4,7 @@ import ASYNC_ITERATOR from 'core-js-pure/es/symbol/async-iterator';
 
 export function is(a, b) {
   // eslint-disable-next-line no-self-compare -- NaN check
-  return a === b ? a !== 0 || 1 / a === 1 / b : a != a && b != b;
+  return a === b ? a !== 0 || 1 / a === 1 / b : a !== a && b !== b;
 }
 
 export function createIterator(elements, methods) {