Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
浅谈Node.js中怎么使用console_创想鸟

浅谈Node.js中怎么使用console

如何在node.js中使用控制台?本篇文章给大家介绍一下在node.js中使用控制台的方法,了解一下console 类中的大多数方法,希望对大家有所帮助!

浅谈Node.js中怎么使用console

在这篇文章中,我们将学习如何更有效地使用Node.js console 类中的大多数方法。【推荐学习:《nodejs 教程》】

前提条件

本教程在Chrome浏览器70.0.3538.77版本和Node.js 8.11.3版本中得到验证。

使用console.log,console.info, 和console.debug

console.log 方法会打印到标准输出,无论是终端还是浏览器控制台。
它默认输出字符串,但可以与模板字符串结合使用,以修改其返回的内容。

console.log(string, substitution)

console.infoconsole.debug 方法在操作上与 console.log 相同。

你可以在Firefox浏览器控制台中默认使用console.debug ,但要在Chrome浏览器中使用它,你必须在所有级别菜单中把日志级别设置为Verbose

1.png

模板字符串中的参数被传递给 util.format它将处理这些参数,用相应的转换值替换每个替换标记。

支持的替换代币是。

util.format

const msg = `Using the console class`;console.log('%s', msg);console.log(msg);

这段代码将输出以下内容。

OutputUsing the console classUsing the console class

%s 是默认的替换模式。

%s%d%f%i

const circle = (radius = 1) => {  const profile = {};  const pi = 22/7;  profile.diameter = 2 * pi * radius;  profile.circumference = pi * radius * 2;  profile.area = pi * radius * 2;  profile.volume = 4/3 * pi * radius^3;  console.log('This circle has a radius of: %d cm', radius);  console.log('This circle has a circumference of: %f cm', profile.diameter);  console.log('This circle has an area of: %i cm^2', profile.area);  console.log('The profile of this cirlce is: %o', profile);  console.log('Diameter %d, Area: %f, Circumference %i', profile.diameter, profile.area, profile.circumference)}circle();

这段代码将输出以下内容。

OutputThis circle has a radius of: 1 cmThis circle has a circumference of: 6.285714285714286 cmThis circle has an area of: 6 cm^2The profile of this cirlce is: {diameter: 6.285714285714286, circumference: 6.285714285714286, area: 6.285714285714286, volume: 7}Diameter 6, Area: 6.285714285714286, Circumference 6

%o 将被一个数字(整数或浮点数)所替代。%d 将被一个浮动值所取代。%f 将被一个整数取代。%i 将被一个对象所取代。

%o 特别方便,因为我们不需要用 JSON.stringify来展开我们的对象,因为它默认显示对象的所有属性。

请注意,你可以使用任意多的令牌替换。它们只是按照你传递的参数的顺序被替换。

%o

这个替换令牌将CSS样式应用于被替换的文本。

console.log('LOG LEVEL: %c OK', 'color: green; font-weight: normal');console.log('LOG LEVEL: %c PRIORITY', 'color: blue; font-weight: medium');console.log('LOG LEVEL: %c WARN', 'color: red; font-weight: bold');console.log('ERROR HERE');

这段代码将输出以下内容。

2.png

JSON.stringify 替换标记之后,我们传递给%c 的文本会受到样式的影响,但之前的文本则保持原样,没有样式。

使用%c

传给它的第一个参数是要以表的形式返回的数据。第二个是要显示的选定列的数组。

console.table(tabularData, [properties])

这个方法将把传递给它的输入格式化为表格,然后在表格表示之后记录输入对象。

数组

如果一个数组作为数据被传递给它,数组中的每个元素将是表格中的一行。

const books = ['The Silmarillion', 'The Hobbit', 'Unfinished Tales'];console.table(books);

3.png

对于一个深度为1的简单数组,表格中的第一列有标题索引。在第一列的索引标题下是数组的索引,数组中的项目在第二列的值标题下列出。

这就是嵌套数组的情况。

const authorsAndBooks = [['Tolkien', 'Lord of The Rings'],['Rutger', 'Utopia For Realists'], ['Sinek', 'Leaders Eat Last'], ['Eyal', 'Habit']];console.table(authorsAndBooks);

4.png

对象

对于深度为1的对象,对象的键会列在索引标题下,而对象中的值则列在第二列标题下。

const inventory = { apples: 200, mangoes: 50, avocados: 300, kiwis: 50 };console.table(inventory);

5.png

对于嵌套的对象。

const forexConverter = { asia: { rupee: 1.39, renminbi: 14.59 , ringgit: 24.26 }, africa: { rand: 6.49, nakfa: 6.7 , kwanza:0.33 }, europe: { swissfranc: 101.60, gbp: 130, euro: 115.73 } };console.table(forexConverter);

6.png

还有一些嵌套的对象。

const workoutLog = { Monday: { push: 'Incline Bench Press', pull: 'Deadlift'}, Wednesday: { push: 'Weighted Dips', pull: 'Barbell Rows'}};console.table(workoutLog);

7.png

这里,我们指定只想看到列推下的数据。

console.table(workoutLog, 'push');

8.png

要对某一列下的数据_进行排序_,只需点击该列标题。

很方便,是吗?

试着把一个带有一些数值的对象作为数组传给console.log!

使用console.table

传给这个函数的第一个参数是要记录的对象,而第二个参数是一个包含选项的对象,这些选项将定义结果输出的格式,或者对象中的哪些属性将被显示。

返回的是一个由node的util.expect函数格式化的对象。

输入对象中的嵌套或子对象可在披露三角形下展开。

console.dir(object, options);// where options = { showHidden: true ... }

让我们看看这个动作。

百度文心百中 百度文心百中

百度大模型语义搜索体验中心

百度文心百中 22 查看详情 百度文心百中

const user = {  details: {    name: {      firstName: 'Immanuel',      lastName: 'Kant'    },    height: `1.83m"`,    weight: '90kg',    age: '80',    occupation: 'Philosopher',    nationality: 'German',    books: [      {        name: 'Critique of Pure Reason',        pub: '1781',      },      {        name: 'Critique of Judgement',        pub: '1790',      },      {        name: 'Critique of Practical Reason',        pub: '1788',      },      {        name: 'Perpetual Peace',        pub: '1795',      },    ],    death: '1804'  }}console.dir(user);

这里是Chrome浏览器的控制台。

9.png

使用console.table

这个函数将为传递给它的XML/HTML渲染一棵交互式树。如果无法渲染节点树,它默认为一个Javascript对象。

console.dirxml(object|nodeList);

console.dir ,渲染的树可以通过点击披露三角形来扩展,在其中可以看到子节点。

它的输出类似于我们在浏览器的Elements标签下发现的输出。

这是我们从维基百科页面传入一些HTML时的情况。

const toc = document.querySelector('#toc');console.dirxml(toc);

10.png

让我们从这个网站上的一个页面传入一些HTML。

console.dirxml(document)

11.png

这就是我们传入一个对象时的情况。

12.png

试着在一些HTML上调用console.dirxml ,看看会发生什么。

使用console.dir

传递给函数的第一个参数是一个要测试是否为真值的值。所有传递的其他参数被认为是信息,如果传递的值没有被评估为真值,就会被打印出来。

Node REPL将抛出一个错误,停止后续代码的执行。

console.assert(value, [...messages])

下面是一个基本的例子。

console.assert(false, 'Assertion failed');
OutputAssertion failed: Assertion failed

现在,让我们找点乐子。我们将建立一个小型测试框架,使用console.dir

const sum = (a = 0, b = 0) => Number(a) + Number(b);function test(functionName, actualFunctionResult, expected) {  const actual = actualFunctionResult;  const pass = actual === expected;  console.assert(pass, `Assertion failed for ${functionName}`);  return `Test passed ${actual} === ${expected}`;}console.log(test('sum', sum(1,1), 2)); // Test passed 2 === 2console.log(test('sum', sum(), 0));    // Test passed 0 === 0console.log(test('sum', sum, 2));      // Assertion failed for sumconsole.log(test('sum', sum(3,3), 4)); // Assertion failed for sum

使用console.assertconsole.assert

这两个基本上是相同的。它们都会打印传递给它们的任何字符串。

然而,console.error 在信息传递之前会打印出一个三角形的警告符号。

console.warn(string, substitution);

13.png

console.warn ,在信息传递前打印出一个危险符号。

console.error(string, substitution);

14.png

让我们注意到,字符串替换可以用与console.warn 方法相同的方式来应用。

下面是一个使用console.error 的迷你日志函数。

const sum = (a = 0, b = 0) => Number(a) + Number(b);function otherTest(actualFunctionResult, expected) {  if (actualFunctionResult !== expected) {    console.error(new Error(`Test failed ${actualFunctionResult} !== ${expected}`));  } else {    // pass  }}otherTest(sum(1,1), 3);

15.png

使用console.log

这个控制台方法将打印字符串console.error ,后面是传递给函数的标签,然后是堆栈跟踪到函数的当前位置。

function getCapital(country) {  const capitalMap = {    belarus: 'minsk', australia: 'canberra', egypt: 'cairo', georgia: 'tblisi', latvia: 'riga', samoa: 'apia'  };  console.trace('Start trace here');  return Object.keys(capitalMap).find(item => item === country) ? capitalMap[country] : undefined;}console.log(getCapital('belarus'));console.log(getCapital('accra'));

16.png

使用console.trace(label)

Count将开始并递增一个名为Trace: 的计数器。

让我们建立一个单词计数器来看看它是如何工作的。

const getOccurences = (word = 'foolish') => {  const phrase = `Oh me! Oh life! of the questions of these recurring, Of the endless trains of the faithless, of cities fill’d with the foolish, Of myself forever reproaching myself, for who more foolish than I, and who more faithless?`;  let count = 0;  const wordsFromPhraseArray = phrase.replace(/[,.!?]/igm, '').split(' ');  wordsFromPhraseArray.forEach((element, idx) => {    if (element === word) {      count ++;      console.count(word);    }  });  return count;}getOccurences();
getOccurences('foolish');

在这里,我们看到console.count(label) 这个词被记录了两次。该词在短语中每出现一次就记录一次。

[secondary_label]foolish: 1foolish: 22

我们可以用这个方法来查看一个函数被调用了多少次,或者我们的代码中的某一行被执行了多少次。

使用label

顾名思义,这将重置一个计数器,该计数器有一个由foolish 方法设置的console.countReset(label)

const getOccurences = (word = 'foolish') => {  const phrase = `Oh me! Oh life! of the questions of these recurring, Of the endless trains of the faithless, of cities fill’d with the foolish, Of myself forever reproaching myself, for who more foolish than I, and who more faithless?`;  let count = 0;  const wordsFromPhraseArray = phrase.replace(/[,.!?]/igm, '').split(' ');  wordsFromPhraseArray.forEach((element, idx) => {    if (element === word) {      count ++;      console.count(word);      console.countReset(word);    }  });  return count;}getOccurences();
getOccurences('foolish');
[secondary_label]foolish: 1foolish: 12

我们可以看到,我们的console.count 函数返回2,因为在这句话中确实有两次出现label ,但由于我们的计数器在每次匹配时都被重置,所以它记录了两次getOccurences

使用foolishfoolish: 1

console.time(label) 函数启动一个定时器,并将console.timeEnd(label) 作为参数提供给该函数,而console.time 函数停止一个定时器,并将label 作为参数提供给该函数。

console.time('');console.timeEnd('');

我们可以通过向两个函数传递相同的console.timeEnd 名称来计算出运行一个操作所需的时间。

const users = ['Vivaldi', 'Beethoven', 'Ludovico'];const loop = (array) => {  array.forEach((element, idx) => {    console.log(element);  })}const timer = () => {  console.time('timerLabel');  loop(users);  console.timeEnd('timerLabel');}timer();

我们可以看到计时器停止后显示的计时器标签与时间值相对应。

OutputVivaldiBeethovenLudovicotimerLabel: 0.69091796875ms

循环函数花了0.6909ms完成了对数组的循环操作。

结论

最后,我们已经来到了本教程的结尾。

请注意,本教程没有涵盖label 类的非标准使用,如labelconsole ,和console.profile

更多编程相关知识,请访问:编程入门!!

以上就是浅谈Node.js中怎么使用console的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/558364.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小米12是2k屏吗
上一篇 2025年11月9日 23:44:17
蓝色协议职业等级怎么提升 职业等级提升方法
下一篇 2025年11月9日 23:44:19

相关推荐

  • mysql如何实现后台管理系统

    答案:基于MySQL的%ignore_a_1%需设计用户、权限、日志等表结构,通过后端语言实现安全的CRUD接口与JWT认证,前端展示数据并控制权限,确保系统安全稳定。 实现一个基于 MySQL 的后台管理系统,核心是构建一个安全、稳定、可扩展的系统架构,将数据库作为数据存储层,配合后端语言和前端界…

    2026年9月21日
    000
  • VSCode的扩展推荐是怎么工作的?

    VSCode的扩展推荐基于用户行为和项目环境智能生成,当你打开.py文件时会推荐Python相关工具,打开.ts、.vue等文件则触发对应语言插件;系统通过分析package.json、requirements.txt等依赖文件识别技术栈,推荐Docker、ESLint等匹配扩展;同时记录常用操作如…

    2026年9月20日
    000
  • VSCode的侧边栏图标代表什么?

    资源管理器(文件夹图标)用于管理项目文件结构,支持新建、重命名、删除和拖拽操作;2. 搜索(放大镜图标)实现全局文本查找与替换,支持正则表达式及范围筛选;3. 源代码管理(分支图标)集成Git功能,可查看变更、提交代码并同步远程仓库;4. 运行和调试(虫子图标)支持断点调试、变量监控及多语言启动配置…

    2026年9月20日
    000
  • 如何为VSCode添加自定义主题?

    可通过安装扩展、手动添加JSON文件或使用Yeoman生成器创建主题。首先安装现成主题扩展并从颜色主题列表中选择应用;其次将自定义主题JSON文件放入用户themes目录后在命令面板中启用;最后可用yo code生成项目开发发布主题,需编辑配色文件并预览效果。 为 VSCode 添加自定义主题有几种…

    2026年9月20日
    000
  • edge浏览器无法打开本地HTML文件或显示空白怎么办_Edge浏览器打开本地HTML文件失败解决方法

    1、检查文件路径并选择Edge打开,确保路径为纯英文;2、在edge://flags中启用“Allow file access from files”;3、使用开发者工具排查资源加载错误;4、通过命令行启动Edge绕过安全限制;5、推荐使用npx live-server搭建本地服务器运行HTML文件…

    2026年9月20日
    000
  • VSCode的扩展推荐是基于什么?

    答案是VSCode根据文件类型、项目配置、用户行为和社区流行度智能推荐扩展。打开.py文件时提示Python扩展,存在package.json则推荐JS工具,频繁格式化代码会推荐Prettier,安装ESLint后可能推荐Prettier,高评分和官方扩展优先展示。 VSCode的扩展推荐主要基于你…

    2026年9月20日
    000
  • mysql如何实现用户注册功能

    答案:通过MySQL创建用户表并结合后端逻辑实现注册功能。首先在MySQL中创建包含用户名、密码、邮箱等字段的users表,确保唯一性约束;后端接收%ignore_a_1%提交的注册数据,对密码加密(如SHA256或bcrypt),使用参数化查询将数据安全存入数据库;前端通过表单或AJAX发送注册请…

    2026年9月13日
    200
  • 如何利用VSCode的配置文件(Launch.json)环境变量来管理不同环境的配置?

    通过配置launch.json中的多个调试环境并结合.env文件,可高效管理开发、测试、生产等不同环境的运行参数。 在使用 VSCode 进行开发时,launch.json 文件是调试配置的核心。通过合理利用环境变量和配置文件分离,可以轻松管理不同环境(如开发、测试、生产)的运行参数。 理解 lau…

    2026年9月13日
    000
  • 如何用ChatGPT来重构优化一段旧代码_提升代码质量与性能的步骤

    明确目标并提供上下文,分步引导ChatGPT优化代码结构、算法和语言特性,最后验证建议并本地测试,确保重构有效且安全。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 用ChatGPT来重构和优化旧代码是一种高效提升代码质量与性能的方式。关键…

    2026年9月12日
    100
  • 如何让VSCode自动识别项目类型?

    VSCode通过项目中的文件和配置自动识别类型,需提供线索如package.json、requirements.txt等标志性文件,结合安装对应语言扩展、配置.vscode/settings.json及使用.code-workspace文件,即可让编辑器正确识别并支持Node.js、Python、R…

    2026年9月12日
    300
  • 如何配置VSCode以附加(Attach)模式调试一个正在运行的Node.js或Python进程?

    要使用VSCode附加模式调试Node.js或Python进程,需先以可调试方式启动程序。对于Node.js,通过–inspect系列参数开启调试端口(如9229),并在launch.json中配置”request”: “attach”及对…

    2026年9月12日
    100
  • 如何找到并安装适合你编程语言的扩展?

    首先确认编程语言及项目需求,再根据编辑器选择合适扩展。以VS Code为例,通过扩展面板搜索语言名称,优先选择官方推荐、高下载量和评分的扩展,如Microsoft提供的Python扩展。安装后检查语法高亮与智能提示,并在设置中配置解释器路径、格式化工具等选项。若使用框架或特定运行时,可额外安装对应增…

    2026年9月12日
    200
  • 如何通过扩展让VSCode支持一门新的编程语言?

    要让VSCode支持新编程语言需通过扩展实现。1. 使用yo code生成扩展模板,包含package.json、语法高亮和语言配置文件。2. 在.tmLanguage.json中用正则定义语法高亮规则,注册到package.json。3. 通过language-configuration.json…

    2026年9月12日
    100
  • 除了内置的终端,VSCode有哪些插件能极大提升命令行的工作效率?

    Code Runner可一键运行多语言代码并显示结果,适合快速测试;2. Terminal Tabs通过标签页管理多个终端会话,支持重命名和快捷切换;3. Shell Command允许对文件或选中文本执行自定义shell命令,提升重复操作效率;4. Task Explorer可视化运行项目脚本,自…

    2026年9月12日
    100
  • 全栈应用中X-Frame-Options防护策略的正确实施

    本教程探讨了在全栈应用中配置`x-frame-options` http响应头以防止点击劫持(clickjacking)的常见误区。我们发现,在spring security等后端框架中配置此头部仅对后端api端点有效,而前端应用(如由nginx、tomcat等服务器托管的单页应用)仍可能面临风险。…

    2026年9月12日
    000
  • 打开DeepSeek官网 deepseek在线版立即使用

    DeepSeek官网在线版可通过https://www.deepseek.com访问,用户点击“开始对话”即可使用智能对话、代码生成、长文本处理等功能,开发者还可申请API密钥集成至自有系统,支持多语言调用与安全配置。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepS…

    2026年9月12日
    100
  • 如何在mysql中开发任务分配管理系统

    答案:基于MySQL设计任务分配系统需构建用户表和任务表,通过assignee_id关联实现任务分配;利用SQL完成任务的增删改查操作;结合角色字段控制权限,管理员可管理所有任务,普通成员仅限个人任务;支持项目分类、评论、日志等扩展功能,并在关键字段创建索引以提升查询性能。 在 MySQL 中开发任…

    2026年9月12日
    100
  • 如何使用mysql开发项目管理任务表

    首先设计包含任务基本信息的主表tasks,包含id、title、status、priority等字段,并通过project_id和assignee_id关联项目与用户;为支持多对多关系创建user_tasks中间表;常用操作包括按项目或负责人查询任务、筛选高优先级任务、更新状态及查找即将到期任务;结…

    2026年9月12日
    100
  • 如何在VSCode中运行和调试Node.js应用?

    答案:在VSCode中调试Node.js需先确认Node环境正常,通过集成终端运行脚本,并创建launch.json配置调试参数,设置断点后启动调试,可查看变量、执行语句或附加到运行进程。 在VSCode中运行和调试Node.js应用非常方便,借助内置的调试功能和集成终端,可以快速启动、设置断点并排…

    2026年9月11日
    100
  • 怎样为开源项目贡献代码?从克隆、调试到提交VSCode扩展的完整流程是怎样的?

    首先克隆仓库并配置环境,安装依赖后在VSCode中调试扩展;接着修改代码并编写测试用例确保质量;最后提交更改至分支并发起PR,描述改动内容与验证方式,等待维护者审查并迭代反馈。 为开源项目贡献代码是提升技术能力、参与社区协作的重要方式。以 VSCode 扩展为例,从克隆仓库到提交代码的完整流程其实并…

    2026年9月11日
    200

发表回复

登录后才能评论
关注微信