搜尋
首頁web前端js教程技術解答js中的全域物件和全域變數以及檔案系統

node全局对象是js中的一个对象,该对象又称为为全局对象。在客户端中,该对象为whindow,由this进行指向ode中的全局对象为global,所有的全局变量,除了自己以外都是global对象的属性

全局对象和全局变量

全局变量是全局对象的宿主

_filename

表示当前正在执行的脚本名,将会输出文件位置所在的绝对路径。
如果在模块中,返回的是模块文件的路径。

PS C:\Users\mingm\Desktop\test> node main.js
C:\Users\mingm\Desktop\test\main.js
PS C:\Users\mingm\Desktop\test>
// 输出全局变量 __filename的值
console.log(__filename);

__dirname

表示当前执行脚本所在的目录

PS C:\Users\mingm\Desktop\test> node main.js
C:\Users\mingm\Desktop\test
PS C:\Users\mingm\Desktop\test>
console.log(__dirname);

setTimeout

function printHello() {
    console.log('hello word');
};

// 两秒后执行以上函数
setTimeout(printHello, 2000);    // 该函数返回一个代表定时器的句柄值
function printHello() {
    console.log('hello word');
};

// 两秒后执行以上函数
setTimeout(printHello, 2000);    // 该函数返回一个代表定时器的句柄值

clearTimeout

停止一个计时器

settlnterval

一个计时器会不断的调用,返回的是一个代表定时器的句柄值

function printHello() {
    console.log('hello word!');
};

// 每两秒后循环执行以上函数
setInterval(printHello, 2000);
PS C:\Users\mingm\Desktop\test> node main.js
hello word!
hello word!
hello word!
hello word!
hello word!
hello word!
hello word!
hello word!
hello word!

process

一个全局变量,即global对象的属性
用于描述当前node进程状态的对象。

process.on('exit', (code) => {
    // 下方代码不会执行
    setTimeout(() => {console.log('该代码不会执行');}, 0);

    console.log('退出码为', code);
});
console.log('程序执行结束');
PS C:\Users\mingm\Desktop\test> node main.js
程序执行结束
退出码为 0
PS C:\Users\mingm\Desktop\test>

一个示例文件

// 输出到终端
process.stdout.write('hello world!' + '\n');    // 创建一个写入流,通过写入流,输出到终端

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

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

// 平台信息
console.log(process.platform);
PS C:\Users\mingm\Desktop\test> node main.js
hello world!
C:\Program Files\nodejs\node.exe0C:\Program Files\nodejs\node.exe,C:\Users\mingm\Desktop\test\main.js
C:\Users\mingm\Desktop\test\main.js1C:\Program Files\nodejs\node.exe,C:\Users\mingm\Desktop\test\main.js
C:\Program Files\nodejs\node.exe
win32
PS C:\Users\mingm\Desktop\test>
PS C:\Users\mingm\Desktop\test> node main.js
{ rss: 18874368,
  heapTotal: 6066176,
  heapUsed: 3677376,
  external: 8272 }
PS C:\Users\mingm\Desktop\test>
// 输出内存使用情况
console.log(process.memoryUsage());

node文件系统

node提供一组类似unix的标准文件操作api

异步和同步

异步的方法后面会有一个回调函数

貌似回调多了以后会产生回调地狱
var fs = require('fs');

// 异步读取
fs.readFile('input.txt', (err, data) => { err?console.error(err):true;
    console.log('异步读取' + data.toString());
});
PS C:\Users\mingm\Desktop\test> node main.js
异步读取33333333333333333333333333333333333333333
PS C:\Users\mingm\Desktop\test>
ps 减少异步,让世界更美好一点(^o^)/
建议回调使用箭头函数,要不然很容易产生回调地狱,让人抓狂

打开文件

// 打开input.txt文件进行读写
var fs = require('fs');

// 异步打开文件
console.log('准备打开文件!');
fs.open('input.txt', 'r+', (err, fd) => {err?console.log(err):console.log('文件打开成功!');});
PS C:\Users\mingm\Desktop\test> node main.js
准备打开文件!
文件打开成功!

获取文件信息

fs模块下的stat方法
判断是否是文件

var fs = require('fs');

fs.stat('input.txt', (err, stats) => {console.log(stats.isFile());});
PS C:\Users\mingm\Desktop\test> node main.js
true
PS C:\Users\mingm\Desktop\test>
var fs = require('fs');

console.log('准备打开文件!');
fs.stat('input.txt', (err, stats) => {err?console.log(err):console.log(stats);
    console.log('读取文件信息成功!');
    // 检测文件类型
    console.log(stats.ifFile());
    console.log(stats.isDirectory());
});
PS C:\Users\mingm\Desktop\test> node main.js
准备打开文件!
Stats {
  dev: 982976588,
  mode: 33206,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: undefined,
  ino: 12103423998567884,
  size: 41,
  blocks: undefined,
  atimeMs: 1532607165034.9072,
  mtimeMs: 1532606924599.2798,
  ctimeMs: 1532606924599.2798,
  birthtimeMs: 1532606914067.3428,
  atime: 2018-07-26T12:12:45.035Z,
  mtime: 2018-07-26T12:08:44.599Z,
  ctime: 2018-07-26T12:08:44.599Z,
  birthtime: 2018-07-26T12:08:34.067Z }
读取文件信息成功!
C:\Users\mingm\Desktop\test\main.js:7
        console.log(stats.ifFile());
                          ^

TypeError: stats.ifFile is not a function
    at fs.stat (C:\Users\mingm\Desktop\test\main.js:7:20)
    at FSReqWrap.oncomplete (fs.js:159:5)
PS C:\Users\mingm\Desktop\test>

写入文件

var fs = require('fs');

console.log('准备写入文件');
fs.writeFile('input.txt', '我是异步写入的内容', (err) => { err?console.log(err):false;
    console.log('数据写入成功!');
    console.log('----我是分割线----');
    console.log('开始读取写入的数据');
    fs.readFile('input.txt', (err, data) => {
        err?console.log(err):false;
        console.log('异步读取数据为' + data.toString());
    });
});
PS C:\Users\mingm\Desktop\test> node main.js
准备写入文件
数据写入成功!
----我是分割线----
开始读取写入的数据
异步读取数据为我是异步写入的内容
PS C:\Users\mingm\Desktop\test>

读取文件

在异步的情况下读取文件
参数 http://nodejs.cn/api/fs.html#...
使用的fs.read http://nodejs.cn/api/fs.html#...

var fs = require('fs');
var buf = new Buffer.alloc(1024);    // 创建一个缓冲区

console.log('准备打开已存在的文件');
fs.open('input.txt', 'r+', (err, fd) => {
    if (err) {
        console.log(err);
    };
    console.log('文件打开成功');
    console.log('准备读取文件');
    fs.read(fd, buf, 0, buf.length, 0, (err, bytes) => {
        if (err) {
            console.log(err);
        };
        console.log(bytes + '字节被读取');

        // 输出读取的字节
        if (buyes > 0) {
            console.log(buf.slice(0, bytes).toString());
        }
    });
});
PS C:\Users\mingm\Desktop\test> node main.js
准备写入文件
数据写入成功!
----我是分割线----
开始读取写入的数据
异步读取数据为我是异步写入的内容
PS C:\Users\mingm\Desktop\test>

Buffer.slice http://nodejs.cn/api/buffer.html
返回一个指向相同原始内存的新建的 Buffer

PS C:\Users\mingm\Desktop\test> node main.js
准备打开已存在的文件
文件打开成功
准备读取文件
27字节被读取
我是异步写入的内容
PS C:\Users\mingm\Desktop\test>
var fs = require('fs');
var buf = new Buffer.alloc(1024);    // 创建一个缓冲区

console.log('准备打开已存在的文件');
fs.open('input.txt', 'r+', (err, fd) => {
    if (err) {
        return console.log(err);
    };
    console.log('文件打开成功');
    console.log('准备读取文件');
    fs.read(fd, buf, 0, buf.length, 0, (err, bytes) => {
        if (err) {
            console.log(err);
        };
        console.log(bytes + '字节被读取');

        // 输出读取的字节
        if (bytes > 0) {
            console.log(buf.slice(0, bytes).toString());
        }
    });
});

关闭文件

在异步的模式下关闭文件

PS C:\Users\mingm\Desktop\test> node main.js
准备打开文件!
文件打开成功!
准备读取文件!
我是异步写入的内容
文件关闭成功
PS C:\Users\mingm\Desktop\test>
var fs = require('fs');
var buf = new Buffer.alloc(1024);


console.log('准备打开文件!');
fs.open('input.txt', 'r+', (err, fd) => {
    if (err) {
        return console.log(err);
    };
    console.log('文件打开成功!');
    console.log('准备读取文件!');
    fs.read(fd, buf, 0, buf.length, 0, (err, bytes) => {
        if (err) {
            console.log(err);
        };

        // 输出能读取的字节
        if(bytes > 0) {
            console.log(buf.slice(0,bytes).toString());
        };

        // 关闭文件
        fs.close(fd, (err) => {
            if(err) {
                console.log(err);
            };
            console.log('文件关闭成功');
        });
    });
});

截取文件

在异步的模式下截取文件
fs.ftruncate(fd[, len], callback)
http://nodejs.cn/api/fs.html#...

var fs = require('fs');
var buf = new Buffer.alloc(1024);

console.log('准备打开文件!');
fs.open('input.txt', 'r+', (err, fd) => {
    if (err) {
        return console.error(err);
    };
    console.log('文件打开成功!');
    console.log('截取了10字节后的文件内容。');

    // 截取文件
    fs.ftruncate(fd, 10, (err) => {
        if (err) {
            console.log(err);
        };
        console.log('文件截取成功');
        console.log('读取相同的文件');
        fs.read(fd, buf, 0, buf.length, 0, (err, bytes) => {
            if (err) {
                console.log(err);
            };

            // 仅输出读取的字节
            if (bytes > 0) {
                console.log(buf.slice(0, bytes).toString());
            }

            // 关闭文件
            fs.close(fd, (err) => {
                console.log(err);
            });
            console.log('文件关闭成功!');
        });
    });
});
PS C:\Users\mingm\Desktop\test> node main.js
准备打开文件!
文件打开成功!
截取了10字节后的文件内容。
文件截取成功
读取相同的文件
我是异�
文件关闭成功!
null
PS C:\Users\mingm\Desktop\test>

删除文件

PS C:\Users\mingm\Desktop\test> node main.js
准备删除文件!
文件删除成功!
PS C:\Users\mingm\Desktop\test>
var fs = require('fs');

console.log('准备删除文件!')
fs.unlink('input.txt', (err) => {
    if (err) {
        return console.log(err);
    };
    console.log('文件删除成功!');
});

创建目录

PS C:\Users\mingm\Desktop\test> node main.js
创建目录 ./tmp/test
{ [Error: ENOENT: no such file or directory, mkdir 'C:\Users\mingm\Desktop\test\tmp\test']
  errno: -4058,
  code: 'ENOENT',
  syscall: 'mkdir',
  path: 'C:\\Users\\mingm\\Desktop\\test\\tmp\\test' }
PS C:\Users\mingm\Desktop\test>
var fs = require('fs');

console.log('创建目录 ./tmp/test');
fs.mkdir('./tmp/test', (err) => {
    if (err) {
        return console.log(err);
    };
    console.log('目录创建成功!');
});

读取目录

forEach方法没有找到一个 官方文档,貌似目前找不到

PS C:\Users\mingm\Desktop\test> node main.js
查看 /tmp 目录
{ [Error: ENOENT: no such file or directory, scandir 'C:\Users\mingm\Desktop\test\tmp']
  errno: -4058,
  code: 'ENOENT',
  syscall: 'scandir',
  path: 'C:\\Users\\mingm\\Desktop\\test\\tmp' }
PS C:\Users\mingm\Desktop\test>
var fs = require('fs');

console.log('查看 /tmp 目录');
fs.readdir('./tmp/', (err, files) => {
    if (err) {
        return console.log(err);
    };
    files.forEach((file) => {    // 这个方法目前没有找到,联系到客户端的方法,貌似是合并的意思
        console.log( file );    
    });
});

相关文章:

全局对象_php教程

Node.js 全局对象

什么是JavaScript全局对象?全局对象有哪些属性?

相关视频:

Nodejs + mongoDB实战开发微博系统视频教程

以上是技術解答js中的全域物件和全域變數以及檔案系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript數據類型:瀏覽器和nodejs之間是否有區別?JavaScript數據類型:瀏覽器和nodejs之間是否有區別?May 14, 2025 am 12:15 AM

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScript評論:使用//和 / * * / * / * /JavaScript評論:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:開發人員的比較分析Python vs. JavaScript:開發人員的比較分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

Python vs. JavaScript:選擇合適的工具Python vs. JavaScript:選擇合適的工具May 08, 2025 am 12:10 AM

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript:了解每個的優勢Python和JavaScript:了解每個的優勢May 06, 2025 am 12:15 AM

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

JavaScript的核心:它是在C還是C上構建的?JavaScript的核心:它是在C還是C上構建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript應用程序:從前端到後端JavaScript應用程序:從前端到後端May 04, 2025 am 12:12 AM

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

Python vs. JavaScript:您應該學到哪種語言?Python vs. JavaScript:您應該學到哪種語言?May 03, 2025 am 12:10 AM

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具