平等、深度平等和严格平等的区别

Difference between equal, deep equal, and strict equal

本文关键字:区别 平等 深度      更新时间:2023-09-26

查看关于assert模块的Node.js文档,我看到了assert.equal, assert.strictEqualassert.deepEqual等功能。

equal, deep equal和strict equal到底有什么区别?

正如其他人所说,文档确实说明了区别是什么,但可能不那么容易看到。

断言。equal的作用与JavaScript中的双等号相同:

assert.equal(50, 50);       //true
assert.equal(50, "50");     //true
assert.equal(1, true);      //true
assert.equal(50, 70);       //false
assert.equal({n:1}, {n:1}); //false

这意味着你得到值检查,javascript奇特的类型转换开始。

断言。strictEqual的工作原理类似于JavaScript中的三重等号:

assert.strictEqual(50, 50);   //true
assert.strictEqual(50, "50"); //false
assert.strictEqual(1, true);  //false
assert.strictEqual(50, 70);   //false
assert.equal({n:1}, {n:1});   //false

这意味着对值和类型进行严格的比较检查。

这两种方法都通过引用而不是值来检查复杂对象。这就是deepEquals发挥作用的地方。deepEquals检查对象及其属性的值是否相等:

assert.deepEqual({n:1}, {n:1});    //true
assert.deepEqual({n:1}, {n:true}); //true
assert.deepEqual({n:1}, {n:"1"});  //true

deepEquals对嵌套属性和复杂对象的子对象进行类型和值的==比较。

然后你有deepStrictEqual就像deepEqual,除了它增加了严格的检查类型和值:

assert.deepStrictEqual({n:1}, {n:1});    //true
assert.deepStrictEqual({n:1}, {n:true}); //false
assert.deepStrictEqual({n:1}, {n:"1"});  //false

所以equal和strictEqual测试值的相等性,并且strict添加类型,deeppequal和deepStrictEqual检查两个对象是否包含相同的属性和值。

W3C学校有一些关于这些主题的漂亮,简单的文档:assert.equalassert.strictEqualassert.deepEqualassert.deepStrictEqual