【Node.js】编程基础

  • 1、JavaScript版本
  • 2、JavaScript运行环境
  • 3、JavaScript语句与注释
  • 4、变量
  • 5、数据类型
  • 数值(Number)
  • 字符串(String)
  • 对象(Object)
  • 符号(Symbol)
  • 映射(Map)
  • 集合(Set)
  • 6、JavaScript的函数
  • 匿名函数
  • 箭头函数
  • 高阶函数
  • 7、JavaScript的类
  • 8、严格模式
  • 9、JavaScript编程规范
  • 代码格式
  • 命名规范


1、JavaScript版本

  • ECMA组织制定了JavaScript语言的标准——ECMAScript(简称ES) 。
  • 大多数场合使用JavaScript名称,可将JavaScript看作是ES标准的实现语言。
  • 主要版本:
  • 2009年——ES5;
  • 2015年——ES6(ES2015);
  • ES7( ES2016 )、ES8( ES2017 )、ES9( ES2018 )和ES10( ES2019 )。
  • ES6是目前的主流版本,Node.js自6.0版本开始全面支持ES6。
  • Node.js自7.6版本开始就默认支持async/await异步编程。

2、JavaScript运行环境

  • Node.js REPL交互式运行环境
  • 浏览器控制台

3、JavaScript语句与注释

  • 语句
  • JavaScript每条语句都以分号";"结束
  • 一行代码可包含多条语句。
  • 一行语句太长,则可以使用续航符""进行换行。
  • 语句块
  • 语句块是一组语句的集合,作为一个整体使用大括号“{}”封装。
  • 语句块可以嵌套,形成层级结构。

4、变量

  1. 变量的命名
  • JavaScript的变量可以是任意数据类型。
  • 变量名可以是大小写英文字母、数字、符号“$”或“_”的任意组合,但不能以数字开头。
  1. 变量的声明与赋值
  • 弱类型的编程语言,所有数据类型都可以用var关键字声明。在定义变量时无须指定变量类型。
    var hello; // 声明一个名为hello的变量,此时该变量的值为undefined,表示未定义
  • 使用等号对变量进行赋值,可以将任意数据类型赋值给变量。
    hello='我是个字符串'; //此时变量的值为“我是个字符串”
  1. 可以在声明变量的同时对变量进行赋值。
  2. 可以反复赋值同一个变量。
  3. 变量提升
    变量可以在声明之前使用,值为undefined。
console.log(temp);// 返回undefined
     var temp = '你好';

ES6用let关键字改变这种行为,变量一定要在声明之后使用。

  1. 变量泄露
    用来计数的循环变量使用var关键字声明后会泄露为全局变量。
var temp = 'Hello!';
    for (var i = 0; i < temp.length; i++) {
        console.log(temp[i]);
    }
   console.log(i); // 返回数字6

改用let关键字来声明循环变量避免变量泄露。

  1. 全局作用域和函数作用域

ES5中只有全局作用域(顶层作用域)和函数作用域。

var temp = '你好!';//全局作用域
function testScope() {
    var temp = '早上好!'; //函数作用域
    console.log(temp);
}
testScope(); //返回函数作用域中的“早上好”!
console.log(temp); //返回全局变量的“你好”!

5、数据类型

数值(Number)
  • 不区分整数和浮点数,统一用数值表示。
  • 十六进制数使用0x作为前缀。二进制和八进制数值分别使用前缀0b(或0B)和0o(或0O)。
  • 无法计算结果时就可用NaN表示;Infinity表示无限大。
字符串(String)
  • 字符串是用单引号“’”或双引号“"”括起来的任意文本。
  • ES6提供模板字符串,可使用反引号包括整个模板字符串,使用 ${} 将变量括起来。
var msg = `服务器侦听监听地址和端口:${srvip}:${port},请注意!`;
  • 模板字符串中也可以不嵌入任何变量,通常用于按实际格式输出(如换行)。
对象(Object)

对象是一组由键值对组成的无序集合,用{}表示,键值对之间用逗号分隔。

var myObj = {
  isobj: true,
  num: [1,2,3],
  desp: '对象好像可以无所不包'
};
 //键均为字符串类型,而值可以是任意数据类型。
 //获取一个对象的属性可用“对象名.属性(键)名”的方式。

ES6允许将表达式作为对象的属性名,即把表达式放在方括号内。

let numproperty = 'num';
var myObj = {
    [numproperty]: [1,2,3],
  ['des'+'cription']: '我是个对象'
};
符号(Symbol)

ES6引入数据类型Symbol,用于表示独一无二的值,其值通过Symbol()函数自动生成。
Symbol值用于对象的属性名,可以有3种表示方法。

let welcome = Symbol();//自动产生一个值
// 第1种表示方法
let myObj = {};
myObj[welcome] = '欢迎光临';
// 第2种表示方法
let myObj = { [welcome]: '欢迎光临' };
// 第3种表示方法
let myObj = {};
Object.defineProperty(myObj, welcome, { value: '欢迎光临' });
映射(Map)

ES6引入Map数据结构,与对象类似,但各种类型的数据(甚至对象)都可以作为键。
Map本身是一个构造函数,用于生成Map数据结构。
const myMap = new Map(); 可以使用Map结构的set方法添加成员

const myObj = {welcome: '欢迎光临'};
myMap.set(myObj,'我是一个对象');

使用Map结构的get方法读取键(成员)

myMap.get(myObj);  //结果为我是一个对象

Map结构的实例支持遍历方法。

方法

作用

keys()

返回键名的遍历器。

values()

返回键值的遍历器。

entries()

返回键值对的遍历器。

forEach()

使用回调函数遍历每个成员。

集合(Set)

集合是无重复的无序的数据结构,类似于数组,但没有重复的值。
集合是一个构造函数,用于生成Set数据结构。

const mySet = new Set();

可以通过add()方法向Set结构加入成员。
Set()函数可将Iterable类型的数据结构(数组、集合或映射)作为参数,用于初始化集合。

const mySet = new Set([1, 2, 3, 4, 4]);//会自动过滤掉其中一个数字4
  • Set结构中的元素可以看作是键,与Map结构不同的是,它只有键名没有键值。
  • Set结构使用与Map结构相同的4种遍历方法来遍历成员。

遍历数组可以采用下标循环,而遍历映射和集合就无法使用下标。为了统一集合类型,ES6引入了新的Iterable类型,数组、映射和集合都属于Iterable类型。这种类型的集合可以通过新的for
… of循环来遍历。更好的遍历方式是使用Iterable类型内置的forEach方法。

6、JavaScript的函数

匿名函数

声明函数时省略函数名。

var sumAge = function (x,y) {
    return  x + y;
};
箭头函数

使用箭头符号(=>)定义函数。

JavaScript编程语言基础教程 javascript编程规范_JavaScript编程语言基础教程

高阶函数

以一个或多个函数作为参数的函数。

function diffAge(m, n, abs) {
    return abs(m-n);
}
diffAge(19, 22, Math.abs);

7、JavaScript的类

JavaScript编程语言基础教程 javascript编程规范_字符串_02

8、严格模式

 变量必须声明后使用。
 不能出现两个命名参数同名的情况,否则报错。
 不能使用with语句。
 不能对只读属性赋值,否则报错。
 不能使用前缀0表示八进制数,否则报错。
 不能删除不可删除的属性,否则报错。
 不能删除变量,只能删除属性。
 eval关键字不会在它的外层作用域引入变量。
 eval和arguments不能被重新赋值。
 不能使用arguments.callee和arguments.caller属性。
 禁止this关键字指向全局对象。
 不能使用fn.caller和fn.arguments属性获取函数调用的堆栈。
 增加了保留字(如protected、static和interface)。

9、JavaScript编程规范

代码格式
  • 每条JavaScript语句应该以分号结束。
  • 缩进使用2个半角空格或4个半角空格,而不使用Tab键。
  • 每行仅声明一个变量,而不要声明多个变量。
  • 字符串尽量使用单引号。
  • 符号“{”应在行末,表示代码块的开始,符号“}”应在行首,表示代码块的结束。
命名规范
  • 变量推荐使用小驼峰命名法。
  • 常量名建议全部大写。
  • 函数也采用小驼峰命名法,建议前缀部分为动词。
  • 类和构造函数采用大驼峰命名法,同时建议前缀部分为名词。
  • 文件命名尽量采用下划线分割单词。