在 JavaScript 中,比较操作符用于比较两个变量或值,并返回 true 或 false。其中,"===" 严格相等比较符比较两个操作数的类型和值是否相等。随着 ES6、ES7、ES8、ES9、ES10、ES11 的不断推出,JavaScript 对于 "===" 严格相等比较符的使用也变得越来越丰富。
ES6 对 "===" 严格相等比较符的改进
在 ES6 中,添加了 "Array.prototype.includes()" 方法,该方法返回一个布尔值,表示某个数组是否包含给定的值。与以前的 "Array.prototype.indexOf()" 方法相比,该方法更加简单和直观,并且可以处理 NaN 值。如下面示例所示:
const arr = [1, 2, 3, NaN]; arr.includes(2); // true arr.includes(NaN); // true arr.indexOf(NaN); // -1
需要注意的是, "includes()" 方法使用 "===" 严格相等比较符进行比较。
ES7 对 "===" 严格相等比较符的改进
在 ES7 中,引入了 "Array.prototype.includes()" 方法的一个姊妹方法:"String.prototype.includes()"。该方法用于确定一个字符串是否包含在另一个字符串中,并返回一个布尔值。与 "indexOf()" 方法不同的是,"includes()" 方法使用 "===" 严格相等比较符进行比较。例如:
const str = 'hello world'; str.includes('hello'); // true str.includes('cat'); // false
ES8 对 "===" 严格相等比较符的改进
在 ES8 中,引入了 "Object.values()" 方法,该方法返回对象自身可枚举属性的值所组成的数组。与之相似的方法还有 "Object.keys()" 和 "Object.entries()"。例如:
const obj = { a: 1, b: 2, c: 3 }; Object.values(obj); // [1, 2, 3]
需要注意的是, "Object.values()" 方法返回的是对象自身可枚举属性的值组成的数组,而不是属性名。
ES9 对 "===" 严格相等比较符的改进
在 ES9 中,添加了 "spread syntax"(扩展语法),该语法可以轻松地将数组或对象扩展成另一个数组或对象。
const arr1 = [1, 2, 3]; const arr2 = [...arr1, 4, 5, 6]; console.log(arr2); // [1, 2, 3, 4, 5, 6] const obj1 = { a: 1, b: 2 }; const obj2 = { ...obj1, c: 3, d: 4 }; console.log(obj2); // {a: 1, b: 2, c: 3, d: 4}
需要注意的是,使用扩展语法进行比较时,也是使用 "===" 严格相等比较符进行比较。
ES10 对 "===" 严格相等比较符的改进
在 ES10 中,添加了 "Array.prototype.flat()" 和 "Array.prototype.flatMap()" 两个方法。其中, "flat()" 方法用于将多维数组转换为一维数组, "flatMap()" 方法则是将每个元素执行一个 map 方法,然后通过 "flat()" 方法将嵌套的数组平坦化,并返回一个新数组。
const arr1 = [1, [2, 3], [4, [5, 6]]]; arr1.flat(); // [1, 2, 3, 4, [5, 6]] arr1.flat(2); // [1, 2, 3, 4, 5, 6] const arr2 = [1, 2, 3]; arr2.flatMap(x => [x * 2]); // [2, 4, 6]
需要注意的是,即使使用 "===" 严格相等比较符,由于数组中包含引用类型的元素,因此在使用 "flat()" 和 "flatMap()" 方法时,也需要注意比较的类型。
ES11 对 "===" 严格相等比较符的改进
在 ES11 中,引入了 "nullish coalescing operator"(空值合并运算符)和 "optional chaining operator"(可选链运算符)两种运算符。
"nullish coalescing operator" 运算符(??)用于将一个空值(null 或 undefined)转换为一个默认值。例如:
const a = null; const b = 9; const c = a ?? b; console.log(c); // 9
在此示例中,因为 a 变量是 null,因此将其转换为 b 变量的值 9。
"optional chaining operator" 运算符(?.)用于减少代码中的嵌套,它允许我们在访问一个对象的属性和方法时,不用进行冗长的空值检查。例如:
-- -------------------- ---- ------- ----- ------ - - ----- ------- ---- --- -------- - ----- ---- ----- - -- ----- ---- - ---------------------- -- --- ----
需要注意的是,如果属性不存在,运算符会返回 undefined 而不是抛出错误。
总结
在 JavaScript 中,"===" 严格相等比较符可以帮助我们比较变量或值的类型和值。随着 ES6 到 ES11 的不断推出,JavaScript 对于 "===" 严格相等比较符的使用也变得越来越丰富。应该在实际开发中充分利用这些新的特性,提高代码的效率和健壮性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c4ec8283d39b4881841fe2