针对这个问题,我分几个部分来详细介绍一下。
简介
Assert
是 Node.js 中内置的一个断言库,用于测试和检查代码中的条件是否为真。它提供了 equal(), strictEqual(), deepEqual(), strictDeepEqual()
四种方法,这四种方法都被用于测试相等性。这四种方法之间的主要区别在于它们用于检查相等性的方式不同。
equal(a, b)
:断言 a == b,即两个值是否相等(其中==
不会进行严格的类型检查)。strictEqual(a, b)
:断言 a === b,即两个值是否全等(其中===
会进行严格的类型检查)。deepEqual(a, b)
:断言 a 和 b 的属性和属性值是否完全相等。strictDeepEqual(a, b)
:断言 a 和 b 的属性、属性值及类型是否完全相等。
equal() 方法
equal(a, b)
方法比较的是两个值是否相等,但是不会进行类型检查。如果两个值相等,则断言通过,否则将抛出错误。
const assert = require('assert');
assert.equal(2, '2'); // 不会抛出错误,因为 '2' 会被隐式转换为数字 2
assert.equal(2, '3'); // 抛出 AssertionError: 2 == 3
在第一个示例中,'2'
会被隐式转换为数字 2
,所以这个断言是通过的。但是在第二个示例中,2
和 '3'
不相等,所以这个断言会抛出错误。
strictEqual() 方法
strictEqual(a, b)
方法比较的是两个值是否全等,不仅要比较两个值是否相等,还要比较两个值的类型。如果两个值全等,则断言通过,否则将抛出错误。
const assert = require('assert');
assert.strictEqual(2, 2); // 不会抛出错误
assert.strictEqual(2, '2'); // 抛出 AssertionError: 2 === '2'
在第一个示例中,2
和 2
是全等的,所以这个断言是通过的。但是在第二个示例中,2
和 '2'
的类型不同,所以这个断言会抛出错误。
deepEqual() 方法
deepEqual(a, b)
方法比较的是两个对象的属性和属性值是否相等,它会一直递归比较对象的属性直到找到原始类型的值为止。
const assert = require('assert');
const obj1 = {
a: 1,
b: {
c: 'hello'
}
};
const obj2 = {
a: 1,
b: {
c: 'hello'
}
};
const obj3 = {
a: 1,
b: {
c: 'world'
}
};
assert.deepEqual(obj1, obj2); // 不会抛出错误
assert.deepEqual(obj1, obj3); // 抛出 AssertionError: { a: 1, b: { c: 'hello' } } deepEqual { a: 1, b: { c: 'world' } }
在第一个示例中,obj1
和 obj2
的属性和属性值完全相同,所以这个断言是通过的。但是在第二个示例中,obj1
和 obj3
的 b.c
不相等,所以这个断言会抛出错误。
strictDeepEqual() 方法
strictDeepEqual(a, b)
方法比较的是两个对象的属性、属性值以及类型是否完全相等,它会一直递归比较对象的属性直到找到原始类型的值为止。
const assert = require('assert');
const obj1 = {
a: 1,
b: {
c: 'hello'
}
};
const obj2 = {
a: 1,
b: {
c: 'hello'
}
};
const obj3 = {
a: 1,
b: {
c: 'world'
}
};
assert.deepStrictEqual(obj1, obj2); // 不会抛出错误
assert.deepStrictEqual(obj1, obj3); // 抛出 AssertionError: { a: 1, b: { c: 'hello' } } deepStrictEqual { a: 1, b: { c: 'world' } }
在第一个示例中,obj1
和 obj2
的属性和属性值以及类型完全相同,所以这个断言是通过的。但是在第二个示例中,obj1
和 obj3
的 b.c
不相等,所以这个断言会抛出错误。
这就是 equal(), strictEqual(), deepEqual(), strictDeepEqual()
的详细攻略,你可以结合示例进行理解和使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较 - Python技术站