Node01


前言

本章的学习内容:es6 声明关键字let const,解构赋值,扩展运算符,对象简化赋值,Set对象,箭头函数,Node.js的内置模块(fs,path)


1. var let const声明关键字

var :es6之前只有全局作用域和函数作用域,var声明的变量是全局变量,直接挂载在window全局,而且存在变量提升,但是不会提升变量的初始化和赋值,相对来说逻辑不是很严谨。

let :块级局部变量,let 禁止重复声明变量(let不允许在同一作用域重复声明变量),不存在变量提升,let有循环作用域的概念。

const: let 的规则基本适用于 const,不存在变量提升,不允许重复声明,有块级作用域。而且const声明一个常量,不允许被修改,声明时必须初始化。(常量的栈地址不能被修改,但是如果是一个对象或者函数,里面的属性和元素是可以修改的)

2. 解构赋值

对象结构赋值
声明的常量的名字,必须要和对象的属性的名字一致

//声明了两个常量 name age
//将p1对象中的同名属性的值赋值给前面声明的常量
const {name, age} = p1;

console.log(name, age);

//声明的常量的名字,必须要和对象的属性的名字一致.

数组解构赋值
将数组arr中元素的值,按照顺序赋值给前面的常量

const arr = [10, 20, 30, 40];

//声明4个常量 a1 a2 a3 a4
//将数组arr中元素的值,按照顺序赋值给前面的常量.
//const [a1, a2, a3, a4] = arr;

//const [a100, a90, a80, a1] = arr;

const [a1, , a2] = arr;

console.log(a1, a2);

函数参数解构赋值

//表示: 函数的参数是1个对象.
//      这个对象包含的属性写在里面
//      函数内部直接使用,不需要点.
function demo( {name,age,weight} ){
    console.log(name);
    console.log(age);
    console.log(weight);
}
//好处:
//调用这个函数的人,只要看到了这个函数的函数头,
//就可以知道传入的=对象 应该包含哪些属性.
demo({
    name: 'jack',
    age: 19,
    weight: 79
});

3. 扩展运算符

对象的扩展运算符

// const p1 ={
//     name: 'jack',
//     age: 19
// }

// const p2 = {
//     gender: '男',
//     ...p1  //扩展p1对象: 将p1对象扩展开来,将p1对象中的所有的属性拿出来放在p2对象中.
// }

const p1 ={
    name: 'jack',
    age: 19,
    weight: 75
}

const p2 = {
    ...p1,
    gender: '男',
    weight: 50
    //...p1  //扩展p1对象: 将p1对象扩展开来,将p1对象中的所有的属性拿出来放在p2对象中.
}

//如果存在同名属性,后面的属性会覆盖前面的属性.
console.log(p2);

数组的扩展运算符

//const arr1 = [10,20, 30];

// const arr2 = [40, 50, ...arr1]; //将arr1数组中的所有的元素扩展开来,放在arr2数组中

// console.log(arr2);


const arr1 = [10, 20, 30];
const arr2 = [40, 50, 60];

const arr3 = [...arr1, ...arr2];
console.log(arr3);

4. 对象简化赋值

如果对象的属性的名字和值,与之前声明的变量的名字和值一致.,可以只写一个。

const name = 'jack';
const age = 19;

// const p1 = {
//     name: name,
//     age: age
// }

const p1 = { name, age }; //对象有1个name属性的,值是name常量的值.

5. Set对象

ES6新增的,和数组类似,但是不允许存储相同变量(可以用来去重)
方法和属性:set.add() 新增
set.delete()删除
set.size 数据的个数
set.has() 检测一个元素是否在set对象中存在
set.clear() 清空所有数据


//1. 创建1个Set对象
// const set = new Set();

// //2. 往set对象中存储数据
// set.add('jack');
// set.add('rose');
// set.add('lucy');
// set.add('rose'); //如果存储的数据 在set中已经存在了,那么就不会将其存储进去. 相同的数据在set中只会保留1份.


//3. set不是数组.
// console.log(set.length);
// for(let i = 0; i < set.length; i++){
//     console.log(set[i]);
// }

//4. set的数据的个数
// console.log(set.size);
//  set不是数组,所以它没有下标.
// for(let i = 0; i < set.size; i++){
//     console.log(set[i]);
// }   

//let item 表示声明了1个变量,所以item可以任意取名字.
// set中有多少个数据,那么这个循环就会循环多少次.
// 每次循环的时候: 声明item, 然后将set中的数据从头到尾赋值给item 
// for(let item of set){
//     console.log(item);
// }



//const arr = [10, 10, 20, 20, 30,40];

//如果通过构造函数传入1个数组,那么这个set中存储的就是这个数组的不重复的数据.
//const set = new Set(arr);

//这个时候,不重复的数据,是存储在set中的.  数组的数据是没有变化的.
//将set中的数据 存储到数组中.
//const arr1 = [...set]

//console.log(arr1);


// console.log(arr);
// console.log(set);


//item 迭代变量.
// for(const item of set){
//     console.log(item);
// }


const arr1 = [10, 10, 20, 20, 30,40];

const arr2 = [...new Set(arr1)];

console.log(arr2);

数组转set :const set = new Set(arr1);set转数组:const arr2 = […new Set(arr1)]

6. 箭头函数

作用:简化函数的定义(本质是匿名函数)
特点:箭头函数没有自身的this绑定,在箭头函数中使用this,this指向的是父级函数的this。

setTimeout(() => console.log(this), 1000); //this=window  window.setTimeout

7. node.js模块

内置模块:是由Node.js提供的模块. 我们可以直接使用.不同的模块 提供不同的功能(fs,path,http)
文件模块/自定义模块
第3方模块.(express)

7.1 fs模块

// 1. 将fs模块导入.
//   fs就指向fs模块.
const fs = require('fs');

//2 读取文件的内容
//2.1 回调函数的执行时机: 文件读取完毕之后,就会执行这个回调.
//    err: 如果读取的时候,发生了错误,那么err就有值,值就是错误的详细信息.
//    data: 如果读取成功,那么读取到的数据就在这个data中.

const path = __dirname+'/data/1.txt';
console.log(path);

fs.readFile(path, 'utf-8', (err, data) => {
    //err如果有值,就代表读取失败,err中存储的就是失败的详细信息.
    if(err) return console.log('读取文件失败, 失败的原因:'+err);
    //否则,代表读取成功.读取到的数据在data中.
    console.log(data);
});

__dirname 关键字.
它的值是 当前文件所在的目录的绝对路径.
__filename 关键字
它的值是 当前文件的绝对路径.

7.2 path模块

const fs = require('fs');
const path = require('path');


// path.join()用来拼接路径
//1. 自动判断是否要加棍
//2. 自动判断正棍还是反棍,.
const filename  =  path.join(__dirname, 'data', '1.txt');


fs.readFile(filename, 'gb2312', (err, data) => {
    if(err) return console.log('读取错误 错误信息: ' + err);
    //说明err没有值,代表读取成功
    console.log(data);
});

path.join(__dirname+ ‘当前文件夹的那个文件路径’) 可以自动拼接路径

8. 字符编码

计算机只能存储0 1(高/低电频)把人类的语言文字翻译成0 1 这个动作就叫字符编码(我现在的理解)
一个字节=8个bit(0000 1111)
ASCLL码: 规定使用1个bit字节来表示1个美国人的文字.在这个表中,规定了每一个文字存储在计算机中对应的二进制(一个字节有256种状态)
GB2312 : 规定使用两个字节表示一个文字: 2个字节 == 16个比特位 65536个.GB2312 编录了 几乎所有的常见的简体汉字 希腊文 日文.规定了每一个文字 在计算机中存储的二进制
Big5: 收录了几乎所有的繁体中文,不包括简体中文

UTF-8编码表:ISO 国际标准化组织发布,收录了世界上几乎所有的文字,使用变长字节,最多使用4个字节表示1个文字.中文: 大部分 3个字节 小部分4个字节(好处是全世界通用,但是存储的内容(最多需要4个字节表示一个文字)比较大)

总结

浏览器非常重要的两个部分:渲染引擎(浏览器内核),js解析引擎(chrome 的v8)
了解node:底层是基于v8解析引擎的,它是js另外的一个宿主,支持跨平台,开发Web应用
var let const 之前写过一篇稍微详细的,ES6还有很多语法待补充,慢慢积累吧,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值