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])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。