❶ Node assert的用法
assert模块提供了断言测试的函数,用于测试不变式
有strict和legacy两种模式,建议只使用strict模式
error的一个子类,表明断言的失败。assert模块跑出的所有错误都是AssertionError类的实例
当使用strict模式时,任何assert函数都会使用严格函数模式的等式,所以assert.deepEqual()会等同于assert.deepStrictEqual()
除此以外,涉及对象的错误信息会产生一个错误差异比较,而不是展示对方的对象,legacy模式则不会这样
ssert.ok() 的别名。
strict 模式
assert.deepStrictEqual() 的别名。
If the values are not equal, an AssertionError is thrown with a message property set equal to the value of the message parameter. If the message parameter is undefined, a default error message is assigned. If the message parameter is an instance of an Error then it will be thrown instead of the AssertionError.
如果值不相等,则会抛出一个AssertionError,该消息属性集等于消息参数的值。如果消息参数未定义,则指定一个默认的错误消息。如果消息参数是一个错误的实例,那么它将被抛出而不是AssertionError。
测试 actual 参数与 expected 参数是否深度相等。 深度相等意味着子对象中可枚举的自身属性也会按以下规则递归地比较
原始值运用 SameValue比较法 进行比较,使用 Object.is() 函数。
对象的 类型标签 应该相同。
对象的 原型 使用 全等运算符 比较。
只比较 可枚举的自身属性 。
Error 的名称与信息也会比较,即使不是可枚举的属性。
可枚举的自身 Symbol 属性也会比较。
对象封装器 会同时比较对象与解封装后的值。
Object 属性的比较是无序的。
Map 键名与 Set 子项的比较是无序的。
当两边的值不相同或遇到循环引用时,递归会停止。
WeakMap 与 WeakSet 的比较不依赖于它们的值。
等待 block 的 promise 完成,如果 block 是一个函数,则立即调用该函数并等待返回的 promise 完成,然后检查 promise 是否被 reject。
如果 block 是一个函数且同步地抛出一个错误,则 assert.doesNotReject() 会返回一个被 reject 的 Promise 并传入该错误。 如果该函数没有返回一个 promise,则 assert.doesNotReject() 会返回一个被 reject 的 Promise 并传入 ERR_INVALID_RETURN_VALUE 错误。 以上两种情况都会跳过错误处理函数。
error 可以是 Class 、 RegExp 或校验函数
断言 block 函数不会抛出错误。
当 assert.doesNotThrow() 被调用时,它会立即调用 block 函数。
如果抛出错误且错误类型与 error 参数指定的相同,则抛出 AssertionError。 如果错误类型不相同,或 error 参数为 undefined,则抛出错误。
error 可以是 Class 、 RegExp 或校验函数。
strict 模式
assert.strictEqual() 的别名
如果值不相等,则用与消息参数的值相等的消息属性集抛出断言错误。如果消息参数未定义,则分配默认错误消息。如果消息参数是错误的实例,那么它将被抛出而不是断言错误。
抛出 AssertionError,并带上提供的错误信息或默认的错误信息。 如果 message 参数是 Error 的实例,则会抛出它而不是 AssertionError
如果消息是伪造的,则将错误消息设置为所提供的操作符所分离的实际值和期望值。如果只提供两个实际的和预期的参数,操作员将默认为“!”=。如果消息被提供为第三个参数,它将被用作错误消息,其他参数将作为抛出对象上的属性存储。如果提供了StActStaskFufft,则该函数之上的所有堆栈帧将从SttTrace中删除(参见Error .CoprTestStAc迹)。如果未给出参数,则将使用默认消息失败。
如果 value 不为 undefined 或 null,则抛出 value。 可用于测试回调函数的 error 参数。 堆栈踪迹会包含传入 ifError() 的错误的所有帧,包括潜在的 ifError() 自身新增的帧。
任何深度不等式的检验。与Advest.DeqQualQualor相反。
测试 actual 参数与 expected 参数是否不深度全等。 与 assert.deepStrictEqual() 相反
测试浅、强制不等式与抽象相等的比较!=
使用 SameValue比较法 测试 actual 参数与 expected 参数是否不全等
测试 value 是否为真值。 相当于 assert.equal(!!value, true, message)。
如果 value 不为真值,则抛出一个带有 message 属性的 AssertionError,其中 message 属性的值等于传入的 message 参数的值。 如果 message 参数为 undefined,则赋予默认的错误信息。 如果 message 参数是 Error 的实例,则会抛出它而不是 AssertionError。 如果没有传入参数,则 message 会被设为字符串 'No value argument passed to `assert.ok()`'。
等待 block 的 promise 完成,如果 block 是一个函数,则立即调用该函数并等待返回的 promise 完成,然后检查 promise 是否被 reject。
如果 block 是一个函数且同步地抛出一个错误,则 assert.rejects() 会返回一个被 reject 的 Promise 并传入该错误。 如果该函数没有返回一个 promise,则 assert.rejects() 会返回一个被 reject 的 Promise 并传入 ERR_INVALID_RETURN_VALUE 错误。 以上两种情况都会跳过错误处理函数。
该函数相当于 assert.throws() ,除了需要等待完成的异步特性。
error 可以是 Class 、 RegExp 、校验函数、每个属性都会被测试的对象、或每个属性(包括不可枚举的 message 和 name 属性)都会被测试的错误实例。
如果指定了 message,则当 block 没被 reject 时,message 参数会作为 AssertionError 的错误信息。
使用 SameValue比较法 测试 actual 参数与 expected 参数是否全等。
断言 block 函数会抛出错误。
error 可以是 Class 、 RegExp 、校验函数、每个属性都会被测试是否深度全等的校验对象、或每个属性(包括不可枚举的 message 和 name 属性)都会被测试是否深度全等的错误实例。 当使用对象时,可以使用正则表达式来校验字符串属性。 详见下面的例子。
如果指定了 message 参数,则当 block 函数不抛出错误时,message 参数会作为 AssertionError 的错误信息。
例子,error 参数为自定义的校验对象或错误实例:
例子,error 参数为构造函数:
例子,error 参数为 RegExp :
使用正则表达式运行错误对象的 .toString, 且包括错误的名称
例子,error 参数为自定义函数:
注意,error 不能是字符串。 如果第二个参数是字符串,则视为不传入 error,且字符串会用于 message。 这可能会造成误解。 使用与抛出的错误信息相同的信息,会导致 ERR_AMBIGUOUS_ARGUMENT 错误。 如果需要使用字符串作为第二个参数,请仔细阅读下面的例子。
鉴于会混淆语句,建议不要使用字符串作为第二个参数。 这可能会导致不易定位的错误。
❷ javascript中的async是什么意思 例如 xmlDom.load();
原文:https://zhuanlan.hu.com/p/6
今天的 JavaScript 已经无处不在了,以传统的方式使用 JavaScript,开发者可以在各种 Web 浏览器中创建 Web 应用;通过 Node.js,可以开发命令行工具与服务器等应用;而在桌面领域,通过基于 JavaScript 与 HTML、CSS 等 Web 技术的 Electron 框架可以构建跨平台桌面应用;React Native 则可以用来开发跨平台移动应用;此外,JavaScript 甚至可以在 IoT 设备上运行。
Ecma TC39 管理着 ECMAScript 生态的发展,它是当前 JavaScript 语言背后的标准,谷歌 V8 团队一直积极参与 JavaScript 相关标准化工作。
V8 是谷歌开源的 JavaScript 引擎(同时也是 WebAssembly 引擎),前面提到的 Chrom、Node.js 与 Electron 等平台都基于 V8。同时除了 Chrome,基于 Chromium 的一系列 Web 浏览器,如 Opera 与即将正式发布的 Microsoft Edge 在底层也基于 V8。
在前几天的 Google I/O 2019 上,V8 团队的 Mathias Bynens 与 Sathya Gunasekaran 分享了 JavaScript 的最新研发进展。