Node.js グローバル オブジェクト


JavaScript には、グローバル オブジェクトと呼ばれる特別なオブジェクトがあり、このオブジェクトとそのすべてのプロパティには、プログラム内のどこからでもアクセスできます。つまり、グローバル変数です。

ブラウザのJavaScriptでは、通常、ウィンドウはグローバルオブジェクトですが、 Node.js のグローバル オブジェクトはグローバルであり、すべてのグローバル変数 (グローバル自体を除く) はグローバルです オブジェクトのプロパティ。

Node.js では、アプリケーションに含めることなく、グローバル プロパティに直接アクセスできます。


グローバル オブジェクトとグローバル変数

グローバルの最も基本的な役割は、グローバル変数のホストとして機能することです。 ECMAScriptの定義によれば、以下の条件が満たされます。 ファイルの変数はグローバル変数です:

  • 最外層で定義された変数;

  • 暗黙的に定義された変数 (直接代入用に定義されていない変数)。

  • グローバル変数を定義すると、この変数はグローバル オブジェクトのプロパティにもなり、その逆も同様です。注意が必要です 興味深いことに、Node.js ではすべてのユーザー コードが現在のモジュールに属しているため、最も外側のレベルで変数を定義することはできません。 モジュール自体は最も外側のコンテキストではありません。

注:

グローバル変数が汚染される可能性があるため、グローバル変数の導入を避けるために、常に var を使用して変数を定義してください。 名前空間はコード結合のリスクを高めます。

__filename


__filename

は、現在実行中のスクリプトのファイル名を表します。ファイルの場所の絶対パスが出力されますが、コマンド ライン パラメーターで指定したファイル名と同じでない場合があります。 モジュール内の場合、戻り値はモジュール ファイルへのパスです。

ファイル main.js を作成します。コードは次のとおりです。

// 输出全局变量 __filename 的值
console.log( __filename );

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
/web/com/php/nodejs/main.js

__dirname


__dirname

は、現在ファイルが存在するディレクトリを表します。実行中のスクリプトが見つかりました。

ファイル main.js を作成します。コードは次のとおりです。

// 输出全局变量 __dirname 的值
console.log( __dirname );

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
/web/com/php/nodejs

setTimeout(cb, ms)


setTimeout(cb , ms)

グローバル関数は、指定されたミリ秒 (ms) 数後に指定された関数 (cb) を実行します。 :setTimeout() は、指定された関数を 1 回だけ実行します。

タイマーを表すハンドル値を返します。 インスタンス

ファイル main.js を作成します。コードは次のとおりです。

function printHello(){
   console.log( "Hello, World!");
}
// 两秒后执行以上函数
setTimeout(printHello, 2000);

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
Hello, World!

clearTimeout(t)


clearTimeout(t)

グローバル関数が使用されます。 setTimeout() によって以前に作成されたタイマーを停止します。 パラメーター

t

は、setTimeout() 関数によって作成された計算機です。 ファイル main.js を作成します。コードは次のとおりです。

function printHello(){
   console.log( "Hello, World!");
}
// 两秒后执行以上函数
var t = setTimeout(printHello, 2000);

// 清除定时器
clearTimeout(t);

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js

setInterval(cb, ms)


setInterval(cb , ms)

グローバル関数は、指定されたミリ秒 (ms) 数後に指定された関数 (cb) を実行します。

タイマーを表すハンドル値を返します。 clearInterval(t) 関数を使用してタイマーをクリアできます。

setInterval() メソッドは、clearInterval() が呼び出されるかウィンドウが閉じるまで関数を呼び出し続けます。

ファイル main.js を作成します。コードは次のとおりです。

function printHello(){
   console.log( "Hello, World!");
}
// 两秒后执行以上函数
setInterval(printHello, 2000);

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
Hello, World! こんにちは世界! こんにちは世界! こんにちは世界! こんにちは世界! …

上記のプログラムは、2秒ごとに「Hello, World!」を出力し、ctrl + cボタンを押すまで永久に実行されます。


console

console は、コンソールの標準出力を提供するために使用されます。これは、Internet Explorer の JScript エンジンによって提供されるデバッグ ツールであり、徐々にブラウザーの事実上の標準になりました。

Node.js はこの標準に従い、標準出力ストリーム (stdout) または標準エラー ストリーム (stderr) に文字を出力するために使用される、一貫した動作を持つコンソール オブジェクトを提供します。

コンソールメソッド

コンソールオブジェクトのメソッドは以下のとおりです:

89console.assert(value[, message][, ...])console.log(): 標準出力ストリームに文字を出力し、改行文字で終わります。


console.log はいくつかを受け入れます パラメータ、パラメータが 1 つだけの場合、このパラメータの文字列形式が出力されます。パラメータが複数ある場合は、 C言語のprintf()コマンドと同様の形式で出力します。

最初のパラメータは文字列です (そうでない場合) パラメータを使用するには、改行を出力するだけです。

console.log('Hello world'); 
console.log('byvoid%diovyb'); 
console.log('byvoid%diovyb', 1991);

実行結果は次のとおりです:

Hello world 
byvoid%diovyb 
byvoid1991iovyb
  • console.error(): 使用法はconsole.log()と同じですが、標準エラーストリームに出力されます。

  • console.trace(): 現在のコールスタックを標準エラーストリームに出力します。

console.trace();

実行結果は次のとおりです:

Trace: 
at Object.<anonymous> (/home/byvoid/consoletrace.js:1:71) 
at Module._compile (module.js:441:26) 
at Object..js (module.js:459:10) 
at Module.load (module.js:348:31) 
at Function._load (module.js:308:12) 
at Array.0 (module.js:479:10) 
at EventEmitter._tickCallback (node.js:192:40)

インスタンス

ファイルmain.jsを作成します。コードは次のとおりです。

console.info("程序开始执行:");

var counter = 10;
console.log("计数: %d", counter);

console.time("获取数据");
//
// 执行一些代码
// 
console.timeEnd('获取数据');

console.info("程序执行完毕。")

main.jsファイルを実行します。コードは次のとおりです:

$ node main.js
程序开始执行:
计数: 10
获取数据: 0ms
程序执行完毕

プロセス

プロセスはグローバル変数であり、グローバルオブジェクトの属性です。

これは、現在の Node.js プロセスのステータスを記述するために使用されるオブジェクトであり、オペレーティング システムとのシンプルなインターフェイスを提供します。通常、ローカルのコマンドラインプログラムを作成するときは、それに対処する必要があります。プロセス オブジェクトの最も一般的に使用されるメンバー メソッドのいくつかを以下に紹介します。

シリアル番号メソッドと説明
1console.log([data][, ...])
標準に準拠 出力ストリームは文字を出力し、改行文字で終わります。このメソッドは複数のパラメータを受け取ります。パラメータが 1 つしかない場合は、このパラメータの文字列形式が出力されます。複数の引数がある場合、出力は C 言語の printf() コマンドに似た形式になります。
2console.info([data][, ...])
Pこのコマンドの機能は、chrome のみを除き、情報メッセージを返すことです。テキストが出力され、残りには青い感嘆符が表示されます。
3console.error([data][, ...])
はエラーメッセージを出力します。エラーが発生すると、コンソールに赤い十字が表示されます。
4console.warn([data][, ...])
警告メッセージを出力します。コンソールに黄色の感嘆符が表示されます。
5console.dir(obj[, options])
は、オブジェクトを検査し、読みやすく印刷しやすい形式で表示するために使用されます。
6console.time(label)
タイミングの開始を示す出力時間。
7console.timeEnd(label)
タイミングの終了を示す終了時間。
console.trace(message[, ...])スタック内で現在実行されているコードの呼び出しパス。このテスト関数は、必要な関数にコンソールを追加するだけで非常に役立ちます。 .trace でテストできます。
は、式または変数が true であるかどうかを判断するために使用されます。最初のパラメーターは式です。式の場合、2 番目のパラメータは文字列です。 2 番目のパラメータは、最初のパラメータが false の場合にのみ出力され、それ以外の場合は結果はありません。
シリアル番号イベントと説明
1exit
プロセスを終了する準備ができたときにトリガーされます。
2beforeExit
このイベントは、ノードがイベント ループをクリアし、他の取り決めがないときにトリガーされます。通常、プロセスがスケジュールされていない場合、ノードは終了しますが、「beforeExit」リスナーを非同期的に呼び出すことができるため、ノードは実行を継続できます。
3uncaughtException
例外がイベント ループにバブルバックすると、このイベントがトリガーされます。モニターが例外に追加された場合、デフォルトのアクション (スタック トレースを出力して終了) は発生しません。
4Signalイベント
は、プロセスがシグナルを受信するとトリガーされます。シグナルのリストについては、SIGINT、SIGUSR1 などの標準 POSIX シグナル名を参照してください。

ファイル main.js を作成します。コードは次のとおりです。

process.on('exit', function(code) {

  // 以下代码永远不会执行
  setTimeout(function() {
    console.log("该代码不会执行");
  }, 0);
  
  console.log('退出码为:', code);
});
console.log("程序执行结束");

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
程序执行结束
退出码为: 0

終了ステータス コード

終了ステータス コードは次のとおりです:

ステータス コード 名前と説明
1キャッチされていない致命的例外
キャッチされなかった例外があり、ドメインまたは uncaughtException ハンドラーによって処理されませんでした。
2未使用
予約済み
3内部JavaScript解析エラー
JavaScriptソースコードにより、ノードプロセスの開始時に解析エラーが発生します。非常にまれですが、Node の開発時にのみ使用できます。
4内部JavaScript評価失敗
JavaScriptのソースコードはNodeプロセスを開始し、評価中に関数失敗を返します。非常にまれですが、Node の開発時にのみ使用できます。
5致命的なエラー
V8 の致命的で回復不可能なエラー。通常、stderr に出力され、内容は次のとおりです: FATAL ERROR
6Non-function Internal Exception Handler
キャッチされない例外、内部例外ハンドラー関数が何らかの理由で on-function に設定されており、呼び出すことができません。
7内部例外ハンドラーの実行時エラー
例外がキャッチされず、例外処理関数が処理中に例外自体をスローしました。たとえば、process.on('uncaughtException') またはdomain.on('error') が例外をスローした場合です。
8未使用
予約済み
9無効な引数
不明なパラメータが指定されているか、指定されたパラメータに値がない可能性があります。
10内部 JavaScript 実行時エラー
Node プロセスの開始時に JavaScript ソース コードがエラーをスローする これは非常にまれで、Node の開発時にのみ発生します。
12無効なデバッグ引数
パラメータ --debug および/または --debug-brk が設定されていますが、間違ったポートが選択されています。
>128シグナル終了
ノードが SIGKILL や SIGHUP などの致命的なシグナルを受信した場合、終了コードは 128 にシグナル コードを加えたものになります。これは標準的な Unix の慣行であり、終了シグナル コードが上位に配置されます。

プロセス属性

プロセスは、システムの対話をより適切に制御するのに役立つ多くの便利な属性を提供します:

実行中のプログラムのプラットフォーム システム「darwin」、「FreeBSD」、「Linux」、「Sunos」または「Win32」require.minの代替メソッド。違いは、実行時にメイン モジュールが変更された場合、require.main は古いモジュールを返し続ける可能性があることです。どちらも同じモジュールを参照していると考えることができます。
シリアル番号.プロパティと説明
1stdout
標準出力ストリーム。
2stderr
標準エラーストリーム。
3stdin
標準入力ストリーム。
4argv
argv プロパティは、コマンドラインからスクリプトを実行するときに、さまざまなパラメーターで構成される配列を返します。最初のメンバーは常にノード、2 番目のメンバーはスクリプト ファイル名、残りのメンバーはスクリプト ファイルのパラメーターです。
5execPath
現在のスクリプトを実行する Node バイナリへの絶対パスを返します。
6execArgv
コマンドラインでスクリプトを実行するときに、メンバーがノード実行可能ファイルとスクリプトファイルの間のコマンドラインパラメータである配列を返します。
7env
メンバーが現在のシェルの環境変数であるオブジェクトを返します
8exitCode
プロセスが process.exit を通じて終了する場合のコード。 ()、終了コードを指定する必要はありません。
9version
ノードのバージョン (v0.10.18 など)。
10versions
ノードのバージョンと依存関係を含むプロパティ。
11config
現在のノードの実行可能ファイルをコンパイルするために使用されるJavaScript構成オプションを含むオブジェクト。これは、./configure スクリプトを実行して生成されるのと同じ「config.gypi」ファイルです。
12pid
現在のプロセスのプロセス番号。
13title
プロセス名、デフォルト値は「node」ですが、この値はカスタマイズできます。
14arch
現在の CPU アーキテクチャ: 'arm'、'ia32' または 'x64'。 F15lPlatform
16
Requile

ファイル main.js を作成します。コードは次のとおりです。

// 输出到终端
process.stdout.write("Hello World!" + "\n");

// 通过参数读取
process.argv.forEach(function(val, index, array) {
   console.log(index + ': ' + val);
});

// 获取执行路局
console.log(process.execPath);


// 平台信息
console.log(process.platform);

main.js ファイルを実行します。コードは次のとおりです。

$ node main.js
Hello World!
0: node
1: /web/www/node/main.js
/usr/local/node/0.10.36/bin/node
darwin

メソッド リファレンス マニュアル

プロセスは、より良いものを容易にするために多くの便利なメソッドを提供します。制御システムの相互作用:

シリアル番号メソッドと説明
1abort()
これにより、ノードが中止イベントをトリガーします。ノードが終了し、コア ファイルが生成されます。
2chdir(directory)
現在作業中のプロセスのディレクトリを変更し、操作が失敗した場合は例外をスローします。
3cwd()
現在のプロセスの作業ディレクトリを返します
4exit([code])
プロセスを終了するには、指定されたコードを使用します。省略した場合はコード0が使用されます。
5getgid()
プロセスのグループ ID を取得します (getgid(2) を参照)。グループの名前ではなく、数値 ID を取得します。
注: この関数は、POSIX プラットフォーム (つまり、Windows 以外および Android) でのみ使用できます。
6setgid(id)
プロセスのグループ ID を設定します (setgid(2) を参照)。数値IDまたはグループ名を受信できます。グループ名が指定されている場合は、数値 ID への解決を待機してブロックされます。
注: この関数は、POSIX プラットフォーム (つまり、Windows 以外および Android) でのみ使用できます。
7getuid()
プロセスのユーザー ID を取得します (getuid(2) を参照)。これはユーザー名ではなく数値のユーザー ID です。
注: この機能は、POSIX プラットフォーム (つまり、Windows 以外および Android) でのみ使用できます。
8setuid(id)
プロセスのユーザー ID を設定します (setuid(2) を参照)。数値 ID または文字列名を受け取ります。グループ名が指定されている場合、数値 ID に解析されるまでブロックされます。
注: この関数は、POSIX プラットフォーム (つまり、Windows 以外および Android) でのみ使用できます。
9getgroups()
プロセスのグループ iD 配列を返します。 POSIX システムがそれを持っているという保証はありませんが、node.js はそれを保証します。
注: この機能は、POSIX プラットフォーム (つまり、Windows 以外および Android) でのみ使用できます。
10setgroups(groups)
プロセスのグループIDを設定します。これは許可された操作であるため、root 権限、または CAP_SETGID 機能が必要です。
注: この機能は、POSIX プラットフォーム (つまり、Windows 以外および Android) でのみ使用できます。
11initgroups(user, extra_group)
/etc/group を読み取り、メンバーが属しているすべてのグループを使用してグループ アクセス リストを初期化します。これは承認された操作であるため、root 権限、または CAP_SETGID 機能が必要です。
注: この関数は、POSIX プラットフォーム (つまり、Windows 以外および Android) でのみ使用できます。
12kill(pid[, signal])
pid はプロセス ID、signal は送信されたシグナルの説明文字列です。シグナル名は、「SIGINT」や「SIGHUP」などの文字列です。省略した場合、シグナルは「SIGTERM」になります。
13メモリ使用量()
ノードプロセスによって使用されるメモリステータスを記述するオブジェクトをバイト単位で返します。
14nextTick(callback)
現在のイベントループが終了したら、関数を呼び出します。
15umask([mask])
プロセスファイルのマスクを設定または読み取ります。子プロセスは親プロセスからマスクを継承します。マスク パラメータが有効な場合は、古いマスクが返されます。それ以外の場合は、現在のマスクが返されます。
16uptime()
ノードが実行されている秒数を返します。
17hrtime()
現在のプロセスの高解像度時間を [秒、ナノ秒] 配列の形式で返します。それは過去と比較した任意の出来事です。この値は日付に依存しないため、クロック ドリフトの影響を受けません。主な目的は、正確な時間間隔を通じてプログラムのパフォーマンスを測定することです。
前の結果を現在の process.hrtime() に渡すと、2 つの間の時間差が返され、時間間隔のベンチマークと測定に使用できます。

インスタンス

ファイルmain.jsを作成します。コードは次のとおりです:

// 输出当前目录
console.log('当前目录: ' + process.cwd());

// 输出当前版本
console.log('当前版本: ' + process.version);

// 输出内存使用情况
console.log(process.memoryUsage());

main.jsファイルを実行します。コードは次のとおりです:

$ node main.js
当前目录: /web/com/php/nodejs
当前版本: v0.10.36
{ rss: 12541952, heapTotal: 4083456, heapUsed: 2157056 }