chenogeの日志


  • 首页

  • 归档

  • 搜索

nodejs-fs模块

发表于 2017-08-05

一、异步读文件

按照JavaScript的标准,异步读取一个文本文件的代码如下:

1
2
3
4
5
6
7
8
9
'use strict';
var fs = require('fs');
fs.readFile('sample.txt', 'utf-8', function (err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
}
});

下面的例子演示了如何读取一个图片文件:

1
2
3
4
5
6
7
8
9
10
'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');
}
});


阅读全文 »

nodejs-process对象

发表于 2017-08-05

process是Node.js提供的一个对象,它代表当前Node.js进程。

1
2
3
4
5
6
7
8
9
10
11
12
13
process === global.process;	//True

process.version; //'v5.2.0'

process.platform; //'darwin'

process.arch; //'x64'

process.cwd(); //返回当前工作目录: '/Users/michael'

process.chdir('/private/tmp'); // 切换当前工作目录:Undefined

process.cwd(); // '/private/tmp'


阅读全文 »

nodejs-模块原理

发表于 2017-08-05

零、区别

Node.js 模块遵循CommonJS规范,ES6 模块与CommonJS模块的差异有以下两点

  • CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
  • CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。


一、Node.js 模块实现原理

实现“模块”功能的奥妙就在于JavaScript是一种函数式编程语言,它支持闭包。如果我们把一段JavaScript代码用一个函数包装起来,这段代码的所有“全局”变量就变成了函数内部的局部变量。假如我们编写的hello.js代码是这样的:

1
2
3
var s = 'Hello';
var name = 'world';
console.log(s + ' ' + name + '!');

Node.js加载了hello.js后,它可以把代码包装一下,变成这样执行:

1
2
3
4
5
6
7
(function () {
// 读取的hello.js代码:
var s = 'Hello';
var name = 'world';
console.log(s + ' ' + name + '!');
// hello.js代码结束
})();

所以,Node利用JavaScript的函数式编程的特性,轻而易举地实现了模块的隔离。 但是,模块的输出module.exports怎么实现?这个也很容易实现,Node可以先准备一个对象module:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 准备module对象:
var module = {
id: 'hello',
exports: {}
};

var load = function (module) {
// 读取的hello.js代码:
function greet(name) {
console.log('Hello, ' + name + '!');
}
module.exports = greet;
// hello.js代码结束
return module.exports;
};

var exported = load(module);
// 保存module:
save(module, exported);

可见,变量module是Node在加载js文件前准备的一个变量,并将其传入加载函数,我们在hello.js中 可以直接使用变量module原因就在于它实际上是函数的一个参数:

1
module.exports = greet;

通过把参数module传递给load()函数,hello.js就顺利地把一个变量传递给了Node执行环境,Node会把module变量保存到某个地方。

由于Node保存了所有导入的module,当我们用require()获取module时,Node找到对应的module,把这个module的exports变量返回,这样,另一个模块就顺利拿到了模块的输出:

1
var greet = require('./hello');

以上是Node实现JavaScript模块的一个简单的原理介绍。

html空节点(3px空隙问题)

发表于 2017-07-31

换行与空隙

html换行被解析为空格。也是常说的3像素空隙的问题,根据测试不同浏览器产生的空隙大小会不一样。

Chrome,Firefox,IE8+都存在这样的问题,浏览器把换行或空格解析成了“空白节点”,就是javascript中nodeType等于3的节点,IE6,7是忽略这个节点的。

阅读全文 »

H5-FileReader

发表于 2017-07-25

一、FileList

FileList 对象针对表单的 file 控件。当用户通过 file 控件选取文件后,这个控件的 files 属性值就是 FileList 对象。它在结构上类似于数组,数组里每一个元素都是File对象,包含用户选取的多个文件。如果 file 控件没有设置 multiple 属性,那么用户只能选择一个文件,FileList 对象也就只有一个元素了。


二、File

我们看到一个 FileList 对象包含了我们选中的 File 对象


阅读全文 »

JS-三种对话框

发表于 2017-07-25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//弹出对话框并输出一段提示信息  
function ale() {
//弹出一个对话框  
alert("提示信息!");  
}

//弹出一个询问框,有确定和取消按钮  
function firm() {  
//利用对话框返回的值 (true 或者 false)  
if (confirm("你确定提交吗?")) {  
alert("点击了确定");  
}  
else {  
alert("点击了取消");  
}  
}

//弹出一个输入框,输入一段文字,可以提交  
function prom() {  
//将输入的内容赋给变量 name ,  
var name = prompt("请输入您的名字", "");
//这里需要注意的是,prompt有两个参数,前面是提示的话,后面是当对话框出来后,在对话框里的默认值  
//如果返回的有内容 
if (name) 
{  
alert("欢迎您:" + name)  
}  
}

JS-正则表达式

发表于 2017-07-14

语法

  • \d可以匹配一个数字,等价于[0-9]
  • \w可以匹配一个单字字符 (字母、数字或者下划线) ,等价于[A-Za-z0-9_]
  • \W匹配一个非单字字符,等价于[^A-Za-z0-9_]
  • .可以匹配一个任意字符 ,换行符除外
  • \s匹配一个空白字符,包括空格、制表符、换页符和换行符
  • \S匹配一个非空白字符
  • *表示任意个字符,等价于 {0,}
  • +表示至少一个字符,等价于 {1,}
  • ?表示0个或1个字符,等价于 {0,1}
  • {n}表示n个字符
  • {n,m}表示n-m个字符
  • \转义
  • (x)普通分组,匹配 'x'并且记住匹配项
  • (?<组名>RegExp)具名组,使用$<组名>引用具名组
  • [xyz]一个字符集合
  • [^xyz]一个反向字符集
  • A|B可以匹配A或B
  • ^表示行的开头或非的意思
  • $表示行的结束
阅读全文 »
1…2627

chenoge

一个程序猿和一支笔的故事

267 日志
438 标签
© 2020 chenoge
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4