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比較不依賴於它們的值。WeakSetlastIndex、標誌和源始終進行比較,即使這些不是可枚舉的屬性。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])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
