nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较

yizhihongxing

针对这个问题,我分几个部分来详细介绍一下。

简介

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'

在第一个示例中,22 是全等的,所以这个断言是通过的。但是在第二个示例中,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' } }

在第一个示例中,obj1obj2 的属性和属性值完全相同,所以这个断言是通过的。但是在第二个示例中,obj1obj3b.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' } }

在第一个示例中,obj1obj2 的属性和属性值以及类型完全相同,所以这个断言是通过的。但是在第二个示例中,obj1obj3b.c 不相等,所以这个断言会抛出错误。

这就是 equal(), strictEqual(), deepEqual(), strictDeepEqual() 的详细攻略,你可以结合示例进行理解和使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 浅谈Webpack自动化构建实践指南

    概述 Webpack是一个现代化的静态模块打包器,可用于在项目中处理JavaScript,CSS及其它文件。在开发过程中,Webpack可以帮助我们自动化构建并优化代码。 本文旨在提供一个基础的Webpack自动化构建实践指南,帮助读者更好地理解Webpack的基本用法及其相关配置。 安装 在使用Webpack进行自动化构建之前,需要先安装Webpack和W…

    node js 2023年6月8日
    00
  • 详解JavaScript 中的批处理和缓存

    详解JavaScript中的批处理和缓存 在Web开发中,对于一些性能敏感的操作,如果没有进行优化的话,往往会给用户带来较差的体验。因此,批处理和缓存常常被用作优化手段,以提高Web应用的性能。 批处理 批处理是指将多个操作打包成一次操作来减少开销的一种技术。在JavaScript中,批处理可以应用在DOM操作和样式操作中。 批处理的原理 在JavaScri…

    node js 2023年6月8日
    00
  • Vue使用Echarts实现数据可视化的方法详解

    下面我将详细讲解“Vue使用Echarts实现数据可视化的方法详解”的攻略,包含以下内容: 概述 本攻略主要介绍如何在Vue项目中使用Echarts进行数据可视化。Echarts是一个非常强大的数据可视化库,提供了各种不同类型的图表(例如折线图、柱状图、饼图、地图等)以及丰富的交互功能。 1. 安装Echarts 首先需要在项目中安装Echarts。可以使用…

    node js 2023年6月8日
    00
  • node的process以及child_process模块学习笔记

    下面是“node的process以及child_process模块学习笔记”的完整攻略。 process模块 在Node.js中,process是一个全局对象,提供了与当前Node.js进程相关的信息和控制。我们可以使用process对象来获取进程的信息、设置进程的环境变量等。 获取命令行参数 process.argv属性包含了当前进程的命令行参数。它是一个…

    node js 2023年6月8日
    00
  • Node学习笔记:Node.js安装及环境配置 史诗级详细版【含测试与镜像说明】

    Node学习笔记:Node.js安装及环境配置 史诗级详细版【含测试与镜像说明】 在本篇文章中,我们将讲解如何安装和配置Node.js的环境,以及如何使用一些常见的工具和命令行操作,以便在日常开发中更高效地使用Node.js。 Node.js安装 安装Node.js 首先,你需要访问 Node.js官网 下载你所需要的版本(LTS或Current均可),然后…

    node js 2023年6月7日
    00
  • npm ci命令的基本使用方法

    npm ci命令是npm官方文档中推荐用于CI/CD(持续集成/持续部署)环境,执行npm ci会先删除node_modules,再根据package-lock.json或npm-shrinkwrap.json还原依赖,确保安装的依赖版本和lock文件中保存的一致,从而避免了npm install命令出现的版本锁定问题,因此可以有效提高依赖包管理的稳定性和可…

    node js 2023年6月8日
    00
  • React服务端渲染原理解析与实践

    React服务端渲染 (Server-Side Rendering, SSR) 是指在服务端实现页面渲染的技术。相对于客户端渲染(CSR),SSR有着更好的首屏渲染性能、更好的搜索引擎优化(SEO)和更好的社交分享体验,因此在实际项目中使用越来越广泛。 客户端渲染的问题 在客户端渲染模式下,首先浏览器请求到HTML,然后请求到JavaScript文件,随后J…

    node js 2023年6月8日
    00
  • node.js解决获取图片真实文件类型的问题

    问题描述: 在web开发中,我们经常需要获取上传的图片的真实文件类型。然而在文件上传时,由于http协议并不会对上传的文件做校验,因此恶意用户可以通过修改扩展名绕过我们文件类型校验的功能。 解决方案: 在node.js中使用第三方库image-size可以轻松地解决获取图片真实文件类型的问题。 image-size库的作用是读取图片文件的头部信息,通过解析这…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部