2016年7月9日 星期六

Process、Utilities、Events (Node.js 3)

※Process

可以取得此程序的資訊
官網連結

※argv

for(var i in process.argv) {
    console.log(process.argv[i]);
}
console.info('\r\n');
process.argv.forEach((val, index, array) => {
    console.log(`${index}: ${val}`);
    // console.log(`${array}`);
});

※官網用的是lambda寫法,我用的是一般寫法,都可以,變數用左上角的ESC鍵下面的那個1,用2個包起來,然後用「${}」可以取得,而用「'」和「"」是不行的

※變數array太長了,裡面就是陣列,用「,」隔開


※cwd、chdir

console.log(`Starting directory: ${process.cwd()}`);
try {
    process.chdir('D:\\');
    // process.chdir('/tmp');
    console.log(`New directory: ${process.cwd()}`);
}
catch (err) {
    console.log(`chdir: ${err}`);
}

※cwd是目前路徑,chdir是改變路徑,我用的是Windows,所以tmp註解打開會抓不到,就會跑catch的程式碼



※arch、env、memoryUsage、platform

console.log('This processor architecture is ' + process.arch);
// console.log(process.env);
console.log(process.env.USERDOMAIN);
console.log(process.memoryUsage());
console.log(`${process.platform}`);

※arch是位元
※process.env裡面有很多,其中有一個USERDOMAIN是其中一個,所以我才可以拿來用
※memoryUsage看記憶體的使用heapTotal和heapUsed是V8用的情況




※Utilities

就是一些公用的方法
官網連結

※isXxx、log

isXxx都是判斷用的,也就是回傳值是true/false,用法都差不多,官網的範例也夠清楚了,就寫一個意思意思一下

const util = require('util');
console.log(util.isArray([]));
console.log(util.isArray(new Array));
console.log(util.isArray({}));
util.log('xxx');

※util.log可以印出現在時間,裡面的xxx可打可不打,只是黏在後面的字串而已


※debuglog

debuglog是偵測環境變數用的,有才會執行程式碼,否則什麼都不會發生

var debuglog = require('util').debuglog('xxx');
var root = 123;
debuglog('hello from foo [%d]', root);

※執行之前要設環境變數,只要xxx有對應到,就會執行


※inherits

左邊繼承右邊,繼承後會多一個叫「super_」的東西,代表右邊的爸爸

function Dad(){}
Dad.prototype.write = function() {
    console.log('prototype');
}
    
const util = require('util');
var son = function(){}
util.inherits(son, Dad);
    
new Dad().write();
new son().write();

※繼承後可以使用爸爸的write方法了

※官網的範例,不懂Events的人看不太懂,所以我寫了這個,然後下面的Events看一下就很容易懂了

※另外javascript宣告變數有三種:var、const、let
var:全域變數,不寫var也是
const:只讀的變數,和java有一點不一樣,java一開始給null,但一給值後就不能改了,這裡的const更嚴格,就算是一開始給null或undefined都不能改
let:區域裡的區域變數

※我用IE11試的結果,const和let都不支援,和ECMA script的版本有關,我記得應該是要在第四版才有支援,但我測IE11的javascript版本是1.3,對應到ECMA script,是1或2版,所以沒有支援

假設最外層有一個全域變數a,if裡面宣告a=1或var a=1,都會改到全域變數,宣告成let就不會改到了

宣告let必需要在最上最寫一行「"use strict";」或者執行時加「--use_strict」,
如node --use_strict xxx.js



※Events

事件
官網連結


const events = require('events');
    
var event = events.EventEmitter;
var e = new event();
    
/*
    e.on('xxx', function() {
        count++;
        console.log('trigger' + count);
    });
*/
    
e.on('xxx', () => {
    count++;
    console.log('trigger' + count);
});
    
e.emit('xxx');
e.emit('xxx');

※註解的部分是一般的寫法,現在官方都是用lambda的寫法了

※emit要和on裡的字一樣,就可以觸發事件

※其他事件都差不多,請參考官網

沒有留言:

張貼留言