0

0

技术解答js中的全局对象和全局变量以及文件系统

php是最好的语言

php是最好的语言

发布时间:2018-07-27 14:31:09

|

1812人浏览过

|

来源于php中文网

原创

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

全局对象和全局变量

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

_filename

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

PS C:UsersmingmDesktop	est> node main.js
C:UsersmingmDesktop	estmain.js
PS C:UsersmingmDesktop	est>
// 输出全局变量 __filename的值
console.log(__filename);

__dirname

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

PS C:UsersmingmDesktop	est> node main.js
C:UsersmingmDesktop	est
PS C:UsersmingmDesktop	est>
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:UsersmingmDesktop	est> 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:UsersmingmDesktop	est> node main.js
程序执行结束
退出码为 0
PS C:UsersmingmDesktop	est>

一个示例文件

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

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

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

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

node文件系统

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

EnableDTS公文传输管理系统3.0
EnableDTS公文传输管理系统3.0

公文是政府与企事业单位处理公务和行政管理工作的重要工具,在各级行政单位中,`办公`的一个重要内容就是办理和制发文件,即`办文`,办文是每个行政管理单位大量日常的工作。借助新的网络信息技术对公文进行高效有序的电子化处理,是办公自动化建设的重要组成部分,也是关系到电子化办公系统建设全局的基础性工程。

下载

异步和同步

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

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

// 异步读取
fs.readFile('input.txt', (err, data) => { err?console.error(err):true;
    console.log('异步读取' + data.toString());
});
PS C:UsersmingmDesktop	est> node main.js
异步读取33333333333333333333333333333333333333333
PS C:UsersmingmDesktop	est>
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:UsersmingmDesktop	est> node main.js
准备打开文件!
文件打开成功!

获取文件信息

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

var fs = require('fs');

fs.stat('input.txt', (err, stats) => {console.log(stats.isFile());});
PS C:UsersmingmDesktop	est> node main.js
true
PS C:UsersmingmDesktop	est>
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:UsersmingmDesktop	est> 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:UsersmingmDesktop	estmain.js:7
        console.log(stats.ifFile());
                          ^

TypeError: stats.ifFile is not a function
    at fs.stat (C:UsersmingmDesktop	estmain.js:7:20)
    at FSReqWrap.oncomplete (fs.js:159:5)
PS C:UsersmingmDesktop	est>

写入文件

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:UsersmingmDesktop	est> node main.js
准备写入文件
数据写入成功!
----我是分割线----
开始读取写入的数据
异步读取数据为我是异步写入的内容
PS C:UsersmingmDesktop	est>

读取文件

在异步的情况下读取文件
参数 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:UsersmingmDesktop	est> node main.js
准备写入文件
数据写入成功!
----我是分割线----
开始读取写入的数据
异步读取数据为我是异步写入的内容
PS C:UsersmingmDesktop	est>

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

PS C:UsersmingmDesktop	est> node main.js
准备打开已存在的文件
文件打开成功
准备读取文件
27字节被读取
我是异步写入的内容
PS C:UsersmingmDesktop	est>
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:UsersmingmDesktop	est> node main.js
准备打开文件!
文件打开成功!
准备读取文件!
我是异步写入的内容
文件关闭成功
PS C:UsersmingmDesktop	est>
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:UsersmingmDesktop	est> node main.js
准备打开文件!
文件打开成功!
截取了10字节后的文件内容。
文件截取成功
读取相同的文件
我是异�
文件关闭成功!
null
PS C:UsersmingmDesktop	est>

删除文件

PS C:UsersmingmDesktop	est> node main.js
准备删除文件!
文件删除成功!
PS C:UsersmingmDesktop	est>
var fs = require('fs');

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

创建目录

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

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

读取目录

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

PS C:UsersmingmDesktop	est> node main.js
查看 /tmp 目录
{ [Error: ENOENT: no such file or directory, scandir 'C:UsersmingmDesktop	est	mp']
  errno: -4058,
  code: 'ENOENT',
  syscall: 'scandir',
  path: 'C:\Users\mingm\Desktop\test\tmp' }
PS C:UsersmingmDesktop	est>
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实战开发微博系统视频教程

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

169

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

246

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

34

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号