什么是Node.js
什么是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的存在
上一篇: JS获取CSS样式的三种方式
下一篇: Vue动态改变css属性--颜色