assert.deepEqual(actual, expected[, message])
历史
版本 | 变化 |
---|---|
v18.0.0 | 现在也比较正则表达式 lastIndex 属性。 |
v16.0.0、v14.18.0 | 在 Legacy 断言模式下,将状态从 Deprecated 更改为 Legacy。 |
v14.0.0 | NaN 现在如果两边都是 NaN 则被视为相同。 |
v12.0.0 | 现在可以正确比较类型标签,并且进行了一些小的比较调整以使检查不那么令人惊讶。 |
v9.0.0 |
|
v8.0.0 | 还比较了 |
v6.4.0、v4.7.1 | 现在可以正确处理类型化的数组切片。 |
v6.1.0、v4.5.0 | 具有循环引用的对象现在可以用作输入。 |
v5.10.1、v4.4.3 | 正确处理非 |
v0.1.21 | 添加于:v0.1.21 |
参数
严格的断言模式
传统断言模式
Stability: 3 - 旧版:改用
assert.deepStrictEqual()
。测试 actual
和 expected
参数之间的深度相等性。考虑改用
。 assert.deepStrictEqual()
可以产生令人惊讶的结果。assert.deepEqual()
深度相等意味着子对象的可枚举"own" 属性也由以下规则递归评估。
比较细节#
- 原始值与
==
运算符, 除了NaN
.如果双方都是相同的,则视为相同NaN
. - Type tags 个对象应该相同。
- 仅考虑 enumerable "own" properties。
Error
- Object wrappers 作为对象和展开的值进行比较。
Object
属性比较无序。Map
Set
- 当双方不同或双方遇到循环引用时,递归停止。
- 实现不测试对象的
[[Prototype]]
Symbol
WeakMap
WeakSet
RegExp
以下示例不抛出AssertionError
因为基元是使用==
运算符.
import assert from 'node:assert'; // WARNING: This does not throw an AssertionError! assert.deepEqual('+00000000', false);
const assert = require('node:assert'); // WARNING: This does not throw an AssertionError! assert.deepEqual('+00000000', false);
"Deep" 相等意味着子对象的可枚举"own" 属性也被评估:
import assert from 'node:assert'; const obj1 = { a: { b: 1 } }; const obj2 = { a: { b: 2 } }; const obj3 = { a: { b: 1 } }; const obj4 = Object.create(obj1); assert.deepEqual(obj1, obj1); // OK // Values of b are different: assert.deepEqual(obj1, obj2); // AssertionError: { a: { b: 1 } } deepEqual { a: { b: 2 } } assert.deepEqual(obj1, obj3); // OK // Prototypes are ignored: assert.deepEqual(obj1, obj4); // AssertionError: { a: { b: 1 } } deepEqual {}
const assert = require('node:assert'); const obj1 = { a: { b: 1 } }; const obj2 = { a: { b: 2 } }; const obj3 = { a: { b: 1 } }; const obj4 = Object.create(obj1); assert.deepEqual(obj1, obj1); // OK // Values of b are different: assert.deepEqual(obj1, obj2); // AssertionError: { a: { b: 1 } } deepEqual { a: { b: 2 } } assert.deepEqual(obj1, obj3); // OK // Prototypes are ignored: assert.deepEqual(obj1, obj4); // AssertionError: { a: { b: 1 } } deepEqual {}
如果这些值不相等,则会抛出一个
,并将 AssertionError
message
属性设置为等于 message
参数的值。如果 message
参数未定义,则分配默认错误消息。如果 message
参数是
的实例,那么它将被抛出而不是 Error
。AssertionError
相关用法
- Node.js assert.deepEqual()用法及代码示例
- Node.js assert.deepStrictEqual()用法及代码示例
- Node.js assert.deepStrictEqual(actual, expected[, message])用法及代码示例
- Node.js assert.doesNotThrow(fn[, error][, message])用法及代码示例
- Node.js assert.doesNotThrow()用法及代码示例
- Node.js assert.doesNotReject(asyncFn[, error][, message])用法及代码示例
- Node.js assert.doesNotMatch()用法及代码示例
- Node.js assert.doesNotMatch(string, regexp[, message])用法及代码示例
- Node.js assert.notEqual(actual, expected[, message])用法及代码示例
- Node.js assert.notDeepStrictEqual(actual, expected[, message])用法及代码示例
- Node.js assert.fail(actual, expected[, message[, operator[, stackStartFn]]])用法及代码示例
- Node.js assert.throws(fn[, error][, message])用法及代码示例
- Node.js assert.equal()用法及代码示例
- Node.js assert.ifError()用法及代码示例
- Node.js assert.throws()用法及代码示例
- Node.js assert.ok()用法及代码示例
- Node.js assert.strictEqual()用法及代码示例
- Node.js assert.fail()用法及代码示例
- Node.js assert.strictEqual(actual, expected[, message])用法及代码示例
- Node.js assert.notStrictEqual(actual, expected[, message])用法及代码示例
- Node.js assert.match()用法及代码示例
- Node.js assert.notDeepStrictEqual()用法及代码示例
- Node.js assert.rejects()用法及代码示例
- Node.js assert.rejects(asyncFn[, error][, message])用法及代码示例
- Node.js assert.match(string, regexp[, message])用法及代码示例
注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 assert.deepEqual(actual, expected[, message])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。