JS在瀏覽器中的全局對象是window
對象。在Node.js環境中,全局對象則叫global
。咱們能夠用它來區分當前JavaScript的執行環境:node
if(typeof(window)==='undefined'){ console.log('node.js'); }else{ console.log('browser'); }
process
是Node.js提供的一個對象,它表明當前Node.js的進程。ajax
JavaScript程序是由事件驅動執行的單線程模型,Node.js也不例外。Node.js不斷執行響應事件的JavaScript函數,直到沒有任何響應事件的函數能夠執行,Node就退出了。數組
此方法能夠在下一次事件響應中執行代碼。瀏覽器
fs模塊是Node.js的內置模塊,是負責處理讀寫文件的。它同時提供了異步和同步方法。異步
異步是在JS執行IO操做時,無需等待執行結果,而是傳入回調函數後,繼續執行下面的代碼,以jQuery的getJSON()
爲例:函數
$.getJSON('http://example.com/ajax',function(data){ console.log('IO結果返回後執行……'); }); console.log('不等待IO結果直接執行後續代碼‘);
而同步則是線形的,須要等待IO操做返回結果後,再執行後續代碼:var data=getJSONSync('http://example.com/ajax');
ui
同步代碼更少,可是異步在實際的用戶體驗更好。編碼
如下是一個異步讀取文本文件的實例:線程
‘use strict'; var fs=require('fs'); fs.readFile('sample.txt','utf-8',function(err,data){ if(err){ console.log(err); }else{ console.log(data) } })
要注意的是,sample.txt
必須在當前的目錄之下,且文件的編碼格式爲utf-8。code
若是咱們要讀取的是二進制文件呢?下面是一個讀取圖片的例子:
'use strict'; var fs = require('fs'); fs.readFile('sample.png', function (err, data) { if (err) { console.log(err); } else { console.log(data); console.log(data.length + ' bytes'); } });
當讀取二進制文件時,不傳入文件編碼(如utf-8)時,data會返回一個Buffer
對象。
這裏提一下Buffer
對象,它是Node處理二進制數據的一個接口,也是Node原生的全局對象,能夠直接使用,不須要require(‘buffer’)
。它的做用相似於數組。
同步讀文件相比異步讀文件,只是在readFile
上加了一個sync
,看下面的例子:
'use strict' var fs=require('fs'); try{ var data=fs.readFileSync('sample.txt','utf-8'); console.log(data); } catch(err){ //錯誤信息 }
若是發生錯誤,只能經過try...catch
捕獲。
經過fs.writeFile()
實現。
'use strict' var fs=require('fs'); var data='Hello Node.js!'; fs.writeFile('output.txt',data,function(err){ if(err){ console.log(err); }else{ console.log('ok'); } });
和讀文件相同,writeFile()
也有一個同步方法writeFileSync()
。
'use strict'; var fs=require('fs'); var data='hello Node.js'; fs.writeFileSync('output.txtx',data);
能夠經過fs.stat()
獲取文件大小、建立時間等信息。它會返回一個stat對象,告訴咱們文件的詳細信息。
'use strict'; var fs=require('fs'); fs.stat('sample.txt',function(err,stat){ if(err){ console.log(err); }else{ // 是不是文件: console.log('isFile: ' + stat.isFile()); // 是不是目錄: console.log('isDirectory: ' + stat.isDirectory()); if (stat.isFile()) { // 文件大小: console.log('size: ' + stat.size); // 建立時間, Date對象: console.log('birth time: ' + stat.birthtime); // 修改時間, Date對象: console.log('modified time: ' + stat.mtime); } } });
一樣,它也有一個同步函數statSync()
。
'use strict'; var fs=require('fs'); var stats=fs.statSync('sample.txt'); console.log(stats.isFile()); //true