1-node入门

Node入门

一、Node简介

1.Node是JavaScript脚本的运行平台。

(1)Node将Chrome的V8引擎封装起来,作为服务器运行平台,以此来执行JavaScript编写的脚本语言。

(2)使JavaScript只能在前段运行的脚本,变成了可以访问文件、访问数据库、访问线程等功能的服务器端的开发语言。

2.Node的特点:

(1)非阻塞I/O:非阻塞I/O又称异步式I/O,是node的重要特点 。

(2)事件驱动:非阻塞I/O是一种异步方式的I/O,与事件驱动密不可分。

(3)单线程:node的引用程序是单进程、单线程的,但是通过事件和回调支持并发,性能变得非常高。node.js采用非阻塞I/O与事件驱动相结合的编程模式,与传统同步I/O线性编程思维有很大的不同,node程序的控制很大程度要依靠事件和回调函数,这不符合开发人员的常规性思路,需要讲一个完整的逻辑拆分为若干单元(事件),从而增加了开发和调试的难度。在JavaScript的任务层面上是单线程的,Node平台本身是多线程的。

二、第一个Node程序

1.http访问服务器的地址格式

http://服务器地址:端口号/文件名

本地计算机的IP:127.0.0.1---->对应的名称localhost

2.搭建第一个node程序

// 1.导入http模块
const http  = require('http');

// 2.创建一个服务器
const httpServer = http.createServer(function (req,res) {
    res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
    res.end('你好,服务器向你发送了响应信息!');
});

// 3.注册监听端口:告诉服务器运行的端口
httpServer.listen(8000,function () {
    console.log('服务器启动成功了!')

});
三、Node程序的运行方式

1.node 文件名

2.使用npm包管理器:

(1)在package.json文件里配置启动:

"scripts": {
    "start": "node ./src/server.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  }

(2)使用npm start 来启动

四、Node的语法基础

1.每条语句以分号结束,没有严格限制

2.一行代码可以包含多条语句(注意:如果一行有多条语句,每条语句都要以";"结束。建议一行只有一条语句)

3.若一行语句太长,可以使用“\”进行换行

4.语句块:由多条语句组成,这些语句都在“{}“中。

5.注释:

(1)单行注释://

(2)多行注释:/**/ webstorm中的快捷键: Ctrl+shift+/

6.变量:

(1)可以是任意的数据类型

(2)变量名是由字母、数字、下划线(’_’),$组成的字符系列,但是首字符不能是数字

(3)JavaScript是弱类型语言,定义变量时不需要指定变量的类型,都可以使用关键字var来声明

(4)可以在声明变量的同时赋值,也可以先声明变量然后再赋值

(5)变量可以反复赋值

7.变量提升:在ES5中,变量可以在声明之前使用,它的值是undefined。

​ 在ES6中使用let关键字声明变量,变量不能在声明之前使用。

8.变量值的泄露:在语句块中使用var关键字声明的变量,会被提升为全局变量,这样就会造成局部变量值的泄露。防止变量值泄露的方法是使用let关键字声明局部变量。

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

(1)ES5中作用域只有两个:

  • 全局作用域:从声明的位置开始到源程序结束均有效
  • 函数作用域:只在函数范围内有效

(2)ES6中增加的块级作用域:在ES6中声明的变量只在它所声明的块级作用域中有效

10.ES6中使用const定义只读常量

const pi = 3.1415926;
console.log(pi);

11.数据类型

(1)Number:数值类型,不区分整数和浮点数

​ 二进制以0b开头,八进制以0o开头,十六进制以0x开头。

​ 如果不能计算得出结果,显示为NaN(Not a Number)。

​ Infinity表示无限大。

(2)String:字符串,使用单引号或者双引号括起来的文本(字符序列)

  • ES6提供模板字符串:使用反引号将字符串括起来,使用${}将变量括起来
// 模板字符串
let host = 'http://localhost';
let port = 8080;
let url = `文档地址为:${host}:${port}`;
console.log(url);

效果展示

  • 模板字符串中可以不嵌入任何变量,按实际格式输出

(3)Boolean:布尔型,值只有两个。true和false

注意:在比较等于时,建议使用===,而不是==

(4)null和undefined

null:表示一个空值,什么都没有

undefined:表示未定义,一般用于判断函数的参数是否正常传递

(5)Array:数组

  • 数组用{}表示,元素之间用逗号分隔
  • 数组元素可以是任意类型
  • 通过数组名带索引来访问数组元素,索引范围是0~数组长度减1

(6)Object:对象

  • 对象用‘{}’来表示,是由键值对组成的一个无序集合,键值对之间用逗号分隔
  • 键的类型必须是字符串类型,值可以是任意类型。
  • 键就是对象的属性。
  • 通过’对象名.属性名(键名)'来访问对象的属性
  • 在ES6中允许将表达式作为键名,但表达式必须放在’[]'中

(7)Symbol:符号,是ES6引入的新类型,用来表示一个独一无二的值,这个值可以作为对象的属性。

Symbol类型的使用(表示方法有三种)

1.对象[属性]=value

let k  = Symbol();
let obj = {};
obj[k]='你好';
console.log(obj);

2.在对象中直接用左键

let k  = Symbol();
let myobj = {
 [k]:'大学生'
}
console.log(myobj);

3.Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。

let k = Symbol();
let obj1 = {};
Object.defineProperty(obj1, k, {
    value: 29,
    writable: true,
    enumerable: true,
    configurable: true
});

(8)Set:集合。集合中的元素没有重复,都是唯一的。

  • 遍历集合和数组
//Set集合
var arr = [1,3,1,3,4,2,4,5,9];
const s =new Set();
arr.forEach(x => s.add(x)); //forEach循环依次从数组中取出一个值赋给x。

//遍历集合

for (let i of s){
    console.log(i)
}
console.log('--------')

// forEach循环
s.forEach(value => {
    console.log(value)
})


  • Set可以接收一个数组作为参数
var arr = [1,3,1,3,4,2,4,5,9];
const s1 = new Set(arr);
console.log(s1);
console.log(Set.prototype.constructor);  //[Function: Set] 构造函数
console.log(s1.size); //6  集合的元素个数
  • 方法(函数)

add(x):将x添加到集合中

delete(x):删除集合中的x,返回的是一个布尔值

has(x):返回一个布尔值,表示x是否是集合的一个成员

clear():清楚集合中的所有成员,没有返回值

  • 遍历的操作
//    forEach()遍历
s.forEach(value => {
    console.log(value)
});
//    keys()返回键名的遍历器
console.log(s.keys());

//    遍历的是键值对
console.log(s.entries());
  • 其他方法

    // map()
    let set = new Set([1, 2, 3, 4]);
    let newset = new Set([...set].map(x => x * 2));  //   通过map遍历集合中的元素,使得集合中的元素乘以2,返回到新的集合中
    console.log(newset);
    
    //filter()  过滤器使用
    let set1 = new Set([1, 2, 3, 4, 5, 6, 7, 8]);
    let newset1 = new Set([...set1].filter(x => x % 2 == 0));
    console.log(newset1);
    
  • 集合操作(并,交,差)
//并集
let a = new Set([1,2,3]);
let b = new Set([4,3,2,1]);
let c = new  Set([...a,...b]);
console.log(c)

//求交集  使用过滤器
console.log(new Set([...a].filter(x => b.has(x))));

//差集
console.log(new Set([...b].filter(x => !a.has(x))));
  • WeakSet集合

(1)集合中的元素只能是对象,不能是其他类型

(2)JavaScript中的垃圾回收机制不考虑WeakSet中元素的回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值