开启Nodejs之旅6---全局对象与全局变量

200 阅读3分钟

global:全局对象,是全局变量的宿主所有的全局变量都在global对象的属性中。

全局变量的定义:A:在最外层定义的变量   如:var a=30;  var b=50;

                           B:全局对象的属性         如: global:{a:30,b:50};

                          C:隐式定义的变量(未定义直接赋值的变量)如a=30;


process :是一个全局变量,是global全局对象的属性,用于描述nodejs进程状态的对象

process.argv 是命令行参数数组,第一个元素是 node,第二个元素是脚本文件名,从第三个元素开始每个元素是一个运行参数。

process.stdout 是标准输出流,通常我们使用的 console.log() 向标准输出打印字符,而 process.stdout.write() 函数提供了更底层的接口。

process.stdin 是标准输入流,初始时它是被暂停的,要想从标准输入读取数据,你必须恢复流,并手动编写流的事件响应函数。

process.nextTick(callback) 的功能是为事件循环设置一项任务,Node.js 会在下次事件循环调响应时调用 callback。Node.js 适合 I/O 密集型的应用,而不是计算密集型的应用,因为一个 Node.js 进程只有一个线程,因此在任何时刻都只有一个事件在执行。如果这个事件占用大量的 CPU 时间,执行事件循环中的下一个事件就需要等待很久,因此 Node.js 的一个编程原则就是尽量缩短每个事件的执行时间。process.nextTick() 提供了一个这样的工具,可以把复杂的工作拆散,变成一个个较小的事件。

console 用于提供控制台标准输出,它是由 Internet Explorer 的 JScript 引擎提供的调试
工具,后来逐渐成为浏览器的事实标准。Node.js 沿用了这个标准,提供与习惯行为一致的
console 对象,用于向标准输出流(stdout)或标准错误流(stderr)输出字符。
console.error():与 console.log() 用法相同,只是向标准错误流输出
console.trace():向标准错误流输出当前的调用栈。

util 是一个 Node.js 核心模块,提供常用函数的集合,用于弥补核心 JavaScript 的功能过于精简的不足。

util.inherits(constructor, superConstructor)是一个实现对象间原型继承的函数
JavaScript 没有提供对象继承的语言级别特性,而是通过原型复制来实现的

var util = require('util');

function Base() { 
 this.name = 'base'; 
 this.base = 1991; 
 this.sayHello = function() { 
    console.log('Hello ' + this.name); 
 }; 
} 

Base.prototype.showName = function() { 
 console.log(this.name); 
}; 

function Sub() { 
 this.name = 'sub'; 
} 

util.inherits(Sub, Base); //Sub继承Base原型上的方法,不继承Base本身构造函数的属性和方法
var objBase = new Base(); 
objBase.showName(); //base
objBase.sayHello(); //hello base
console.log(objBase);//Base { name: 'base', base: 1991, sayHello: [Function] }

var objSub = new Sub(); 
objSub.showName(); //sub  继承了Base原型上的方法
objSub.sayHello(); //objSub.sayHello is not a function 
console.log(objSub); //Sub { name: 'sub' } 
util.inspect
util.inspect(object,[showHidden],[depth],[colors])是一个将任意对象转换为字符串的方法,通常用于调试和错误输出。它至少接受一个参数 object,即要转换的对象。
showHidden 是一个可选参数,如果值为 true,将会输出更多隐藏信息。
depth 表示最大递归的层数,如果对象很复杂,你可以指定层数以控制输出信息的多
少。如果不指定depth,默认会递归2层,指定为 null 表示将不限递归层数完整遍历对象。
如果color 值为 true,输出格式将会以 ANSI 颜色编码,通常用于在终端显示更漂亮
的效果。

var util = require('util'); 
function Person() { 
 this.name = 'byvoid'; 
 
 this.toString = function() { 
 return this.name; 
 }; 
} 
var obj = new Person(); 
console.log(util.inspect(obj)); //Person { name: 'byvoid', toString: [Function] }
console.log(util.inspect(obj, true));
//Person {
  name: 'byvoid',
  toString:
   { [Function]
     [length]: 0,
     [name]: '',
     [arguments]: null,
     [caller]: null,
     [prototype]: { [constructor]: [Circular] } } }

util还提供了util.isArray()、util.isRegExp()、util.types.isDate()、util.isError() 四个类型测试工具util.format()等

const util = require('util');

util.isArray([]);// Returns: true
util.isArray(new Array());// Returns: true
util.isArray({});// Returns: false
//注意Array.isArray() 代替已经废弃的util.isArray()

util.types.isRegExp(/abc/);  // Returns true
util.types.isRegExp(new RegExp('abc'));  // Returns true

util.types.isDate(new Date());  // Returns trueutil.isError(new Error());// Returns: true
util.isError(new TypeError());// Returns: true
util.isError({ name: 'Error', message: 'an error occurred' });// Returns: false//注:util.types.isNativeError代替已经废弃的util.isError()util.format('%s:%s', 'foo', 'bar', 'baz');// Returns: 'foo:bar baz'