global 下的属性和方法
- global
- console
- process
- Buffer 缓存区(重点) 比如:文件读写都写在Buffer中
- clearImmediate 清除立即
- setImmediate 设置立即
- clearInterval
- setInterval
- clearTimeout
- setInterval
- …
1.global
- global.global.global可以循环使用,没有太多实际意义
2.console
- console.log 打印日志
- console.dir 不常用
- console.warn 打印警告
- console.error 打印错误
- console.info 打印信息
- console.time(标志)与console.timeEnd(标志)
- console.time(标志)与console.timeEnd(标志)可以算出时差,比如下面的例子
console.time('a'); for(var i = 0;i<100;i++){ } console.timeEnd('a'); //虽然上面是两个console,但是打印只打印一个结果,为0.085ms
3.process 进程
process.argv
执行环境的参数
假设我执行文件传递参数为 a b c
js console.log(process.argv);//这就打印出一个数组 [ 'D:\\Develop\\nodejs\\node.exe', 'C:\\Users\\ywx502779\\Desktop\\architect 3\\architect\\6.node\\1.node.js', 'a', 'b', 'c' ]
假设我们需要传递参数port为3000,一般我们这么传递:
console.log(process.argv);//这就打印出一个数组
[ 'D:\\Develop\\nodejs\\node.exe',
'C:\\Users\\ywx502779\\Desktop\\architect 3\\architect\\6.node\\1.node.js',
'a',
'--port',
'3000' ]
由于process.argv返回的数组前两项一般用不到,所以我们一般会如下操作(大多数情况下还是借助类似yargs等库来获取参数):
let obj = process.argv.slice(2).reduce((a,b,i,arr) => {
if(b.includes("--")){
a[b.slice(2)] = arr[i+1];
}
return a;
},{});
process.cwd()
当前执行目录(不含当前文件,到文件夹为止)console.log(process.cwd());//C:\Users\ywx502779\Desktop\architect 3\architect\6.node
process.env
执行的环境- 我们可以在
process.env
对象下加自己的变量- 比如:
process.env.NODE_ENV
- 在命令行里配置
NODE_ENV
- mac如何配置:
export NODE_ENV=dev
- windows如何配置:
set NODE_ENV=dev
- 这样
process
下的env
下的NODE_ENV
就有值了,为dev
,那么就可以通过process.env.NODE_ENV
获取到这个NODE_ENV
的值了,然后可以判断是否为开发环境
- mac如何配置:
- 如果代码放到服务器上,那就没有此环境变量,取不到那就说明走线上环境
- 比如:
- 我们可以在
process.nextTick(() => {})
- 代表下个队列
- 参数放回调函数,异步的,里面的异步回调函数放到当前队列的底部执行
- 比如下面的代码,先打印
http://localhost:8888
,再打印nextTick
,因为打印nextTick
的回调放到了队列的底部
let url; if(process.env.NODE_ENV === 'dev'){ url = 'http://localhost:8888' }else{ url = 'http://www.yuhua.com' } process.nextTick(function(){ console.log('nextTick'); }) console.log(url);//http://localhost:8888
- 比如下面的代码,先打印
- 与setImmediate需要区别一下(
面试点
):nextTick是在当前队列的地步,而setImmediate是在第二个队列,所以无论nextTick与setImmediate谁在前谁在后,一定是nextTick先执行
setImmediate(function(){ console.log('setImmediate') // 后执行 }) process.nextTick(function(){ console.log('nextTick'); // 先执行 })