Node.js 阶段学习笔记 1.0

学习安排

  • nodejs基础知识,核心模块
  • 包管理器npm (死了都要会)
  • nodejs的模块化 (掌握)
  • nodejs的框架 -express
  • 数据库-mongodb
  • 使用nodejs开发一个服务端的项目(hackerNews)
  • ES6(部分语法) (死了都要会)

nodejs 基本介绍

node.js 是什么?

node.js,也叫作node,或者nodejs,指的都是一个东西。

  1. node.js官方网站
  2. node.js中文网
  3. node.js 中文社区

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,nodejs允许javascript代码运行在服务端

1. nodejs不是一门新的编程语言,nodejs是在服务端运行javascript的运行环境
2. 运行环境:写得程序想要运行必须要有对应的运行环境
	php代码必须要有apache服务器
	在web端,浏览器就是javascript的运行环境
	在node端,nodejs就是javascript的运行环境
2. javascript并不只是能运行在浏览器端,浏览器端能够运行js是因为浏览器有js解析器,因此只需要有js解析器,任何软件都可以运行js。
3. nodejs可以在服务端运行js,因为nodejs是基于chrome v8的js引擎。

nodejs的本质:不是一门新的编程语言,nodejs是javascript运行在服务端的运行环境,编程语言还是javascript

nodejs与浏览器的区别

相同点:nodejs与浏览器都是运行环境,都能够解析js程序。对于ECMAScript语法来说,在nodejs和浏览器中都能运行。

不同点:nodejs无法使用DOM和BOM的操作,浏览器无法执行nodejs中的文件操作等功能

思考:

  1. 在浏览器端,可以使用javascript操作文件么?
  2. 在nodejs端,可以使用BOM和DOM的方法么?
  3. 我们学习nodejs,学习什么内容?

nodejs可以干什么?

  1. 开发服务端程序(网站)
  2. 开发命令行工具(CLI),比如mime
  3. 开发桌面应用程序(借助 node-webkit、electron 等框架实现)

安装nodejs

nodejs版本

下载地址

官网术语解释

  • LTS 版本:Long-term Support 版本,长期支持版,即稳定版。
  • Current 版本:Latest Features 版本,最新版本,新特性会在该版本中最先加入。

查看node版本

node -v

环境变量

为什么哪里都可以使用node ? 而不是哪里都可以是 FeiQ.exe ???

当要求系统运行一个程序 而没有告诉它程序所在的完整路径时,

  1. 首先在当前目录中查找和该字符串匹配的可执行文件
  2. 进入系统 path 环境变量查找

配置环境变量:

找到环境变量:此电脑--右键--> 属性 --> 高级系统设置 -->  环境变量

直接将可执行程序所在目录配置到PATH中

//如果是window7操作系统,注意要用分号;隔开,不要覆盖原来的内容
D:\Program Files\FeiQ

运行nodejs程序

方式一:使用node执行js文件 (常用)

  • 创建js文件 helloworld.js
  • 写nodejs的内容:console.log('hello nodejs')
  • 打开命令窗口 cmd
    • shift加右键打开命令窗口,执行 node 文件名.js即可
    • 直接在vscode中执行
      • 右键在终端中打开
      • ctr + `
      • ctr+j
  • 执行命令:node helloworld.js

注意:在nodejs中是无法使用DOM和BOM的内容的,因此document, window等内容是无法使用的。

方式二:REPL介绍 (一般偶尔演示用)

  1. REPL 全称: Read-Eval-Print-Loop(交互式解释器)
    • R 读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中。
    • E 执行 - 执行输入的数据结构
    • P 打印 - 输出结果
    • L 循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。
  2. 在REPL中编写程序 (类似于浏览器开发人员工具中的控制台功能)
    • 直接在控制台输入 node 命令进入 REPL 环境
  3. 按两次 Control + C 退出REPL界面 或者 输入 .exit 退出 REPL 界面
    • 按住 control 键不要放开, 然后按两下 c 键

关于代码规范的问题

JavaScript 语句后应该加分号么?

javascript两种代码规范:

ES5-数组的新方法(都是遍历)

forEach

forEach() 方法对数组的每个元素执行一次提供的函数。功能等同于for循环.

应用场景:为一些相同的元素,绑定事件处理器!

需求:遍历数组[“张飞”,“关羽”,“赵云”,“马超”]

var arr = ["张飞","关羽","赵云","马超"];
//第一个参数:element,数组的每一项元素
//第二个参数:index,数组的下标
//第三个参数:array,正在遍历的数组
arr.forEach(function(element, index, array){
  console.log(element, index, array);
});

map

map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。

需求:遍历数组,求每一项的平方存在于一个数组中

var arr = [1,2,3,4,5];  // 1 4 9 16 25
//第一个参数:element,数组的每一项元素
//第二个参数:index,数组的下标
//返回值:一个新数组,每个元素都是回调函数的结果。
var newArray = arr.map(function(element, index){
  return element * element;
});
console.log(newArray);//[1,4,9,16,25]

filter

filter用于过滤出符合条件的元素
返回一个新数组,如果在回调函数中返回true,那么就留下来,如果返回false,就扔掉

需求:遍历数组,将数组中工资超过5000的值过滤出来 [1000, 5000, 20000, 3000, 10000, 800, 1500]

var arr = [1000, 5000, 20000, 3000, 10000, 800, 1500];
//第一个参数:element,数组的每一项元素
//第二个参数:index,数组的下标
//返回值:一个新数组,存储了所有返回true的元素
var newArray = arr.filter(function(element, index){
 	return element >= 5000
});
console.log(newArray);//[1000, 5000, 3000, 800, 1500]

some

some用于遍历数组,如果有至少一个满足条件,就返回true,否则返回false。

需求:遍历数组,判断数组是否包含奇数,[2,4,6,8,10,9]

var arr = [2,4,6,8,10,21];
//第一个参数:element,数组的每一项元素
//第二个参数:index,数组的下标
//返回值:布尔类型的值,只要有一个回调函数返回true,就返回true
var flag = arr.some(function(element, index){
  console.log(element, index);
   return element %2 == 1
  
});
console.log(flag);//true

every

every用于遍历数组,只有当所有的元素返回true,才返回true,否则返回false。

需求:遍历数组,判断数组是否都是偶数,[2,4,6,8,10,9]

  var arr = [2,4,6,8,10,21];
  //第一个参数:element,数组的每一项元素
  //第二个参数:index,数组的下标
  //返回值:布尔类型的值,只有当所有的元素返回true,才返回true,否则返回false。
  var flag = arr.every(function(element, index){
    console.log(element, index);
    return element %2 == 0
  });
  console.log(flag);//false

find

find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined

// 获取第一个大于10的数
var array1 = [5, 12, 8, 130, 44];

var found = array1.find(function(element) {
  return element > 10;
});
console.log(found);

findexIndex

findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。

// 获取第一个大于10的下标
var array1 = [5, 12, 8, 130, 44];

function findFirstLargeNumber(element) {
  return element > 13;
}

console.log(array1.findIndex(findFirstLargeNumber));

ES6(ECMAScript)

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

let与const

ES6中提供了两个声明变量的关键字:const和let

let的使用

ES6 新增了let命令,用来声明变量。它的用法类似于var

  • let声明的变量,多了一个块级作用域
{
  let a = 10;
  var b = 1;
}

a // ReferenceError: a is not defined.
b // 1
  • 不存在变量提升
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
  • 不允许重复声明
let a = 10;
let a = 1;//报错 Identifier 'a' has already been declared

const的使用

const声明一个只读的常量。常量:值不可以改变的量

  • const声明的量不可以改变
const PI = 3.1415;
PI = 3; //报错
  • const声明的变量必须赋值
const num;
  • 如果const声明了一个对象,仅仅保证地址不变
const obj = {name:'zs'};
obj.age = 18;//正确
obj = {};//报错
  • 其他用法和let一样
1. 只能在当前代码块中使用
2. 不会提升
3. 不能重复

let与const的使用场景

1. 如果声明的变量不需要改变,那么使用const
2. 如果声明的变量需要改变,那么用let
3. 学了constlet之后,尽量别用var

模板字符串

模板字面量 是允许嵌入表达式的字符串字面量。你可以使用多行字符串和字符串插值功能。

// 1. 通过``可以定义一个字符串
let str = `hello world`

// 2. 模板字符串内部允许换行
let str = `
  hello
  world
`

// 3. 模板字符串内部可以使用表达式
let str = `
	你好,我是${name}
`

箭头函数

ES6标准新增了一种新的函数:Arrow Function(箭头函数)。

为什么叫Arrow Function?因为它的定义用的就是一个箭头:

基本使用

var fn = function(x, y) {
    console.log(x + y);
}

相当于
//语法: (参数列表) => {函数体}
var fn = (x, y) => {
    console.log(x + y);
}

参数详解

  • 如果没有参数列表,使用()表示参数列表
var sum = () => {
    console.log('哈哈')
};
// 等同于:
var sum = function() {    
    console.log('哈哈')
};
  • 如果只有一个参数,可以省略()
// 等同于:
var sum = function(n1) {    
    console.log('哈哈')
};

var sum = n1 => {
    console.log('哈哈')
};

  • 如果有多个参数,需要使用()把参数列表括起来
var sum = function(n1, n2) {    
    console.log('哈哈')
};

var sum = (n1, n2) => {
    console.log('哈哈')
};

返回值详解

  • 如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来
var sum = function(n1) {    
    console.log('哈哈')
};

var sum = n1 => {
    console.log('哈哈')
};
  • 如果函数体只有一行一句,并且需要返回这个值,那么可以省略{}和return
var fn = function(n1, n2) {
    return n1 + n2;
}

var fn = (n1, n2) => n1 + n2;

案例

  1. 有一个数组[1,3,5,7,9,2,4,6,8,10],请对数组进行排序
  2. 有一个数组['a','ccc','bb','dddd'],请按照字符串长度对数组进行排序
  3. 有一个数组,[57,88,99,100,33,77],请保留60分以上的成绩,返回一个新的数组

箭头函数的注意点

  1. 箭头函数内部没有this,因此箭头函数内部的this指向了外部的this(很爽)
  2. 箭头函数不能作为构造函数,因为箭头函数没有this

【定义一个对象,定时器打招呼, 测试.html】

综合大练习

给定一个数组

let list = [
  // wu: 武力    zhi:智力
  { id: 1, name: '张飞', wu: 97, zhi: 10 },
  { id: 2, name: '诸葛亮', wu: 55, zhi: 99 },
  { id: 3, name: '赵云', wu: 97, zhi: 66 },
  { id: 4, name: '周瑜', wu: 80, zhi: 98 },
  { id: 5, name: '吕布', wu: 100, zhi: 8 },
  { id: 6, name: '司马懿', wu: 30, zhi: 98 }
]
  • 求数组中所有英雄的武力平均值

  • 得到一个新数组,只保留英雄的名字, ['张飞', '诸葛亮', '赵云', '周瑜', '吕布', '司马懿']

  • 得到一个新数组,新数组中只保留武力值超过90的英雄

  • 删除数组中名字为周瑜的英雄

  • 判断数组中所有英雄的武力是否都超过60, 最终打印结果: 全是猛将 还有弱鸡 使用两种方式实现

  • 删除数组中名字叫所有智力低于60的英雄

  • 找到数组中id为2的英雄,求他的武力+智力的综合

结合箭头函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值