当前位置: 移动技术网 > IT编程>网页制作>CSS > 什么是Node.js

什么是Node.js

2018年12月02日  | 移动技术网IT编程  | 我要评论

什么是node.js

node简介

node的javascript解析器就是v8引擎

在node中没有dom和bom的概念, 由以下三部分组成:

	1. ecmascript
	2. 全局成员
	3. 核心模块api

学习目标: 使用node平台搭建一个后台服务器, 进行后端开发

repl环境: read eval print loop 同控制台

es6语法介绍

let关键字

定义变量

因为var关键字存在一些问题:

没有块级作用域

 for (var i = 0; i < 10; i++) {

 }

 console.log(i) // 10

变量声明提升

 console.log(a); // undefined
 var a;

如果使用let关键字则不存在以上两个问题:

	for (let i = 0; i < 10; i++) {

	}

	console.log(i) // 报错: i is not defined


	console.log(a); // 报错: a is not defined
	let a;

总结: 使用let关键字声明变量的特点主要就是有块级作用域, 并且必须先声明再使用, 否则会报错, 没有变量声明提升的概念

const关键字

定义常量

const a = 10;  // 从此以后a不能被重新赋值

a + 1; // 没有对a赋值 所以不会报错

a += 1; // 报错: assignment to constant variable

const b; // 报错: missing initializer in const declaration

总结:

定义常量时必须要给初始值 定义完常量后无法对常量进行重新赋值

let和const都必须要先声明再使用, 并且都不可以重复声明

解构赋值

解构赋值一般用于将对象中的属性值获取出来, 存在变量中使用

let user = {
	name: '刘希晗',
	age: 18,
	gender: '男'
}

// 开发中如果需要将对象的属性值提取出来在变量中使用: 
let uname = user.name;

// es6新语法, 将对象中属性批量提取到变量中:
let { name:username, age } = user;
console.log(username);
console.log(age);

箭头函数

es6中提出的一种新型匿名函数的语法:

也可以理解为一种语法糖

let 函数名 = (形参1, 形参2) => {
	// 函数体
}

特点: 指向外部函数的this, 语法较为简单

注意: 绑定事件时千万不要使用箭头函数, 因为使用function绑定事件处理函数, 内部的this指向事件源, 如果使用箭头函数绑定, 则不会指向事件源

箭头函数的几种变体:

函数只有一个形参, 那么左侧的()可以省略

 let fn1 = (a) => {
 	return a + 1;
 }

 let fn2 = a => {
 	return a + 1;
 }

函数体中只有一行代码, 那么右侧的{}可以省略并且省略return, 默认会返回右侧代码执行的结果

 let fn1 = (a, b) => {
 	return a + b;
 }

 let fn2 = (a, b) => a + b

结合以上两点, 如果只有一个形参, 并且函数体中只有一行代码, 那么两侧的(){}都可以省略

 let fn1 = (a) => {
 	return a + 1;
 }

 let fn2 = a => a + 1

注意事项: 只有一个形参的情况下可以省略左侧的(), 其他情况有多个参数或者没有参数都必须加上()

声明对象属性的简洁语法

以前创建对象属性的字面量:

var name = '刘希晗';
var age = 18;
var weight = 80;

var user = {
	name: name,
	age: age,
	weight: weight,
	eat: function(food) {
		console.log('吃了十斤' + food);
	}
}

es6新语法:

let name = '刘希晗';
let age = 18;
let weight = 80;
let gender = '女';

let user = {
	name,
	age,
	weight,
	gender,
	eat(food) {
		console.log('吃了十斤' + food);
	},
	sleep() {
		console.log('上课睡觉真舒服');
	}
}

内置模块

fs

fs模块: file system 文件, node提供用于操作文件或目录的api都在该模块中

读取文件

 readfile()

 参数1: 要读取的文件路径, 如果是相对路径表示相对于当前执行node命令的路径, 而非相对当前文件, 如果需要相对当前文件路径, 请使用: __dirname进行拼接

 参数2: 编码, 一般情况都需要指定编码, 默认值为null

 参数3: 回调函数, 读取完文件后会执行, 有两个参数, 第一个参数为err, 第二个参数是读取的数据data

写入文件, 会覆盖文件

 writefile()

 参数1: 要读取的文件路径, 如果是相对路径表示相对于当前执行node命令的路径, 而非相对当前文件, 如果需要相对当前文件路径, 请使用: __dirname进行拼接

 参数2: 要写的数据内容

 可选参数3: 编码, 默认为utf8, 一般就使用默认的

 参数4: 回调函数, 写入完文件后会执行, 有一个参数err写入失败时会有数据, 如果err为null表示写入成功

追加文件, 在文件末尾继续追加

 appendfile()

 参数1: 要读取的文件路径, 如果是相对路径表示相对于当前执行node命令的路径, 而非相对当前文件, 如果需要相对当前文件路径, 请使用: __dirname进行拼接

 参数2: 要写的数据内容

 可选参数3: 编码, 默认为utf8, 一般就使用默认的

 参数4: 回调函数, 写入完文件后会执行, 有一个参数err写入失败时会有数据, 如果err为null表示写入成功

写入文件和追加文件都有共同的特点, 如果要写入的目录下文件不存在, 会自动创建文件并写入/追加

全局成员: __dirname, 获取当前文件所在的绝对路径

因为在node中使用相对路径都是相对于当前执行node指令的目录, 所以才会有__dirname和__filename的存在

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网