当前位置: 首页 > 后端技术 > Node.js

Node学习笔记(一)

时间:2023-04-03 15:53:04 Node.js

给node程序传递参数。一般情况下,我们可以通过nodexxx.js来执行我们的文件。在某些情况下,我们希望将一些参数传递给节点。我们可以在文件名后面加上需要传递的参数。nodexxx.jsage=18哈哈我们可以通过程序中内置的对象进程获取传递的参数。控制台日志(进程);通过打印内置对象进程,我们发现它包含了很多信息。argv(argumentvector)属性是一个数组,里面包含了我们传递的参数。第一个元素是node的安装路径,第二个参数是我们所在文件的路径,第三个和第四个参数是我们传递的参数。我们通过argv数组的下标获取传递的参数,也可以遍历这个数组的参数信息。console.log(process.argv[2]);console.log(process.argv[3]);process.argv.forEach(item=>{console.log(item);})node的输出控制台对象是一个全局对象。console.log:最常见的输出内容方式console.clear:清空控制台console.trace:打印函数的调用栈。可以知道调用了哪个函数。console.log(process.argv[2]);console.log(process.argv[3]);console.clear()process.argv.forEach(item=>{console.log(item);})我们可以看到当前控制台打印了argv数组遍历的结果,process.argv[2打印的结果]和process.argv[3]已被清除。通过console.trace()我们可以打印出函数的调用栈。functionfoo(){bar()}functionbar(){console.trace();}foo()globalobjectspecialglobalobjectspecialglobalobject可以在模块中任意使用,但不能用于命令行交互,包括__dirname,__filename,exports,module,require().__dirname:获取当前文件所在的路径,为绝对路径,不包括文件名。__filename:获取当前文件的路径和文件名。控制台日志(__dirname);控制台日志(__文件名);常用的全局对象process对象process对象提供了node进程中的相关信息,比如node的运行环境,参数信息等,当我们用node运行一个程序时,它会在操作系统中启动一个进程。console对象console对象上面已经介绍过了。定时器函数setTimeout(callback,delay[,...args]):回调在delay毫秒后执行一次;setInterval(callback,delay[,...args]):每延迟毫秒重复执行回调;setImmediate(callback[,...args]):在回调I/O事件之后“立即”执行回调;process.nextTick(callback[,...args]):添加到下一个滴答队列。setTimeout(()=>{console.log('setTimeout');},0)setInterval(()=>{console.log('setInterval');},1000)setImmediate(()=>{console.log('setImmediate');})process.nextTick(()=>{console.log('process.nextTick');})copycodeglobalobjectglobal是一个全局对象,前面提到的process,console,setTimeout等被放置在全局全局对象中。控制台日志(全局);控制台会输出global全局对象的部分内容,但不是全部。要查看global全局对象的更多内容,我们可以在终端输入node进入交互环境。然后在交互环境中输入global。然后按两次tab键可以看到global全局对象的更多信息。global和window的区别在浏览器中,全局变量都在window上,比如document、setInterval、setTimeout、alert、console等。在node中,global是全局对象。在浏览器中执行的javascript代码,如果我们在顶层作用域通过var定义一个属性,默认会添加到window对象中。因为浏览器中没有模块的概念,它是最顶层的东西。`varage=18console.log(age);`我们在浏览器中运行,在控制台输入window,可以看到window对象中有一个age属性。在node中,我们通过var来定义一个变量,它在当前模块中只有一个变量,不会放在全局。因为node中的每个文件都是一个独立的模块,所以定义的变量都在模块内部。如果放在全局,在另一个模块中定义相同的变量名会引起冲突。然后我们在节点环境中运行这个文件。varage=18console.log(age);控制台日志(全局名称);可以看到全局对象中没有name属性。