给node程序传递参数
失常状况下咱们通过node xxx.js就能够执行咱们执行咱们的文件。在某些状况下咱们心愿给node传递一些参数。咱们能够在文件名前面加上须要传递的参数。node xxx.js age=18 haha
咱们能够在程序中通过process
这个内置对象获取到传递的参数。console.log(process);
通过打印process
这个内置对象,咱们发现它外面蕴含了很多信息。
其中argv(argument vector)
属性是一个数组,蕴含了咱们传递过去的参数。第一个元素是node
的装置门路,第二个参数是咱们所在文件的门路,第三和第四个参数正是咱们传递的参数。
咱们通过argv数组下标来获取传递的参数,还能够遍历这个数组的参数信息。
console.log(process.argv[2]);console.log(process.argv[3]);process.argv.forEach(item => { console.log(item);})
node的输入console对象是一个全局对象。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()
咱们能够打印出函数的调用栈。
function foo() { bar()}function bar() { console.trace();}foo()
全局对象
非凡的全局对象
非凡的全局对象能够在模块中任意应用,然而不能在命令行交互中应用,包含__dirname、__filename、exports、module、require()。
__dirname:获取以后文件所在的门路,是绝对路径,不包含文件名。
__filename:获取以后文件所在门路和文件名。
console.log(__dirname);
console.log(__filename);
罕用的全局对象
process对象
process对象提供了node过程中相干的信息,例如node的运行环境、参数信息等。当咱们用node运行程序的时候,它会在操作系统里开启一个过程。
console对象
console对象上述曾经介绍过。
定时器函数
setTimeout(callback, delay[, ...args]):callback在delay毫秒后执行一次;setInterval(callback, delay[, ...args]):callback每delay毫秒反复执行一次;setImmediate(callback[, ...args]):callbackI / O事件后的回调的“立刻”执行;process.nextTick(callback[, ...args]):增加到下一次tick队列中。
setTimeout(() => { console.log('setTimeout');}, 0)setInterval(() => {console.log('setInterval');}, 1000)setImmediate(() => { console.log('setImmediate');})process.nextTick(() => { console.log('process.nextTick');})
复制代码
global对象
global是一个全局对象,后面提到的process、console、setTimeout
等都被放到了global全局对象中。console.log(global);
在控制台输入了global全局对象一部分内容,并不是全副。
想要看到global全局对象的更多内容,咱们能够在终端通过输出node进入交互式环境。而后在交互式环境中输出global.而后按两次tab键,就能够看到global全局对象的更多信息。
global和window的区别
在浏览器中,全局变量都是在window上的,比方有document、setInterval、setTimeout、alert、console等等。
在node中,global是全局对象。
在浏览器中执行的javascript
代码,如果咱们在顶级范畴内通过var定义的一个属性,默认会被增加到window
对象上。因为在浏览器中没有模块的概念,是最顶层的货色。
`var age = 18
console.log(age);`
咱们在浏览器中运行,并且在控制台中输出window
,咱们能够看到window
对象中有age
属性。
在node中,咱们通过var定义一个变量,它只是在以后模块中有一个变量,不会放在全局中。因为在node中每个文件都是一个独立的模块,定义的变量是在模块外面。如果放在全局,另一个模块中定义雷同的变量名会产生抵触。
而后咱们在node环境中运行此文件。
var age = 18console.log(age);console.log(global.name);
能够看到global对象中没有name属性。