Node学习笔记(一)
- js语法
- node的网络编程和HTTP协议
- 了解和学习MEAN框架全栈开发
- MongoDB数据库,Express,Angular框架,Node
- 推荐了一些书,见飞书群。
什么是JavaScript
JavaScript特性
- 脚本化的语言,依赖宿主,嵌入在应用程序环境,去调用主环境提供的底层API,可以解释执行也可以编译执行。
- 动态,对象被创建后依然可以自由添加或删除对象属性
- 弱类型
- 函数优先,函数的对象化,函数是第一元素,有闭包,也可以进行函数式编程
- 基于原型的面向对象
- 真正的一次编写处处运行,https://jsconsole.com
为什么叫Node
- 计划设计一个高性能web服务器
- 变成一个快速构建可伸缩的网络应用平台基础架构
- 每个Node应用都是大型网络的一个节点(基于Node的微服务)
Node底层是V8引擎
V8在执行的时候将js源代码编译为机器码
- 将js抽象为语法树
- 将语法树作为JIT编译器的输入并并输出中间代码
- 最后输出可执行的每个后端平台的对应的应用
Why Node
EveryTime
JS和Node关联
MEAN栈
DataBase:MongoDB
Application server:Node
front-end:VUE / angular / react
开发环境:
语法:https://developer.mozilla.org/en-US/docs/Web/javaScript
标准:https://www.ecma-international.org/publications/standars/Standard.htm
REPL命令行环境
R(read) E(evaluate) P(print) L(loop)
Node管理工具:npm
npm是一个开源宝库,每一个小程序都有文档,示例
npm官网:https://www.npmjs.com
npm淘宝镜像:http://npm.taobao.org
基本命令:
# 全局安装
$ npm install XXX -g
Git版本控制
Assert(断言)
function square(number) {
return number * number;
}
var assert = require('assert');
var actual = square(2);
var expected = 4;
//assert(actual, 'square() should have returned a value');
assert.strictEqual(
actual,
expected,
'square() did not calculate the correct value'
);
以上代码运行是没有反馈的,因为运行正确;
将其数据修改,运行会报错。
console.time
curl
JS基本语法
字面量
C++对字面量的预留空间,访问非常快。
JS不同,他的字面里非常慢,因为他是文本执行,是有引擎解析生成的,不是存放在空间里的,同样的字面里再次遇见还需要再次解读,所以字面里不如直接赋值。
变量
代表内存的一个区域,两个步骤:声明和赋值。
-
变量的声明:
- 有字母数字下划线组成,不以数字开头,大小写敏感,不能是保留字
- 可以使用未声明的变量
- var和function两种声明语法
- 后来ES6增加了let、const之类的语法
- 注意:
- 未声明的变量在块级区域赋值会保存在全局对象中
- var在块级区域声明的变量是全局的,会导致循环变量泄漏为全局变量
- let在块级区域声明的变量只在块级区域有效
- const声明一些只读常量,不能只声明不赋值,如果在块区域声明一个常量,块区以外不会被访问。
-
变量的赋值:
-
不声明直接赋值:使其直接称为全局变量
-
可以不考虑类型进行赋值(不推荐)
-
// 未声明的变量之间进行赋值,那么就在global下面声明了一个i,这样就会导致i泄漏
for(i=0;i<3;i++){
console.log(i);
}
console.log("循环体之外,未声明变量i:"+i);
console.log("全局对象中i:"+global.i);
// 两次输出的结果i都是3,因为在块级区域
// 经常使用未声明就会导致global不堪重负,global是一个公共空间,导致程序运行速度下降,并且这个global下的全局变量并不会自动回收
// 修改之后,global就不会保存j做为全局变量
for(var j=0;j<3;j++){
console.log(j)
}
// j会存在local区域对象下,local存储的是当前运行的代码,是文件区,local是可以被访问到的,
// j有可能会被循环意外的代码修改
// 输出global.j 会显示undefine
//
for(let k = 0;k<3;k++){
console.log(k)
}
// 输出global.k会直接报错,
// 因为k既不在global区,也不在local文件区,他仅在块区有效
// 所以推荐使用let进行声明
表达式和语句
表达式:表示一个值
语句:
赋值语句:
声明:
条件语句if
条件表达式?: 三目运算符
条件语句switch