node.jsday01
目录
前言
node.jsday01学习开始
一、复习
二、ES6
- ECMAScript:是JS的标准规范
- ES6 / ES2015:是第6版的标准规范
- ES6简化了之前的JS功能,同时增加新的功能
2.1块级作用域
- let声明的变量会进入到一个暂时性的死区,在赋值前不允许访问;let声明的变量不允许重复声明
- 大括号之间的语句块,就是块级作用域,例如:if、else、for...
- let声明的变量和const声明的常量在块级作用域下都是局部的,不允许被外部访问
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ES6新特性</title> </head> <body> <script> // var声明变量特点: 存在变量声明提升,允许重复声明 //var a console.log(a) var a = 1 var a = 2 console.log(a) // ES6 新增声明方式 // b进入了一个暂时性的死区 // let b // console.log(b) let b = 3 // let b = 4 b = 4 console.log(b) // 1.块级作用域 { var n1 = 1 //全局变量 let n2 = 2 //局部变量 const n3 = 3 //局部常量 } console.log(n3) // 练习:计算1~100之间所有整数的和,使用for循环,变量声明是let let sum=0 for(let i=1;i<=100;i++){ // 求和 sum+=i } console.log(sum) </script> </body> </html>
2.2参数增强
- 可以给参数设置默认值
function add(a,b,c=0){ b = b || 0 ES6之前设置默认值的方式 } add(5000)
- 逻辑运算符赋值:选择将其中一个进行赋值
如果执行了第一个表达式,没有执行第二个表达式,就把第一个表达式的值赋过去
如果执行了第一个表达式,又执行了第二个表达式,就把第二个表达式的值赋过去
var m1 = 3 || 4 //3
var m2 = 3 && 4 //4
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ES6新特性</title> </head> <body> <script> // 2.参数增强 // 给参数设置默认值 function add(a,b,c=0){ // 给参数b设置默认值 // if(b===undefined) { // b=0 // } // 短路逻辑 // 逻辑运算符赋值:选择将其中一个进行赋值 // 如果执行了第一个表达式,没有执行第二个表达式,就把第一个表达式的值赋给b // 如果执行了第一个表达式,又执行了第二个表达式,就把第二个表达式的值赋给b b = b||0 console.log(a+b+c) } // add(5000,8000,300) add(5000,8000) add(5000) // true && 执行 // false && 不执行 // false || 执行 // true || 不执行 var m1 = 3 || 4 //3 var m2 = 3 && 4 //4 console.log(m1,m2) </script> </body> </html>
2.3箭头函数
- 简化了匿名函数的写法,不等价于匿名函数
- ()=>{ }
sort( (a,b)=>{ return a-b } ) //如果箭头函数的函数体中只有一行代码,并且是return形式,可以进一步简化 sort( (a,b)=>a-b )
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ES6新特性</title> </head> <body> <script> // 3.箭头函数 // 匿名函数用法 // var fn=function(){} // (function(){ })() // sort(function(){}) // var p={ play: function(){} } // btn.onclick = function(){} var arr = [23,9,78,6,45] // arr.sort( function(a,b){ // return a-b // } ) // arr.sort( (a,b)=>{ // return a-b // } ) // 如果箭头函数的函数体中只有一行代码,并且是return形式,可以进一步简化 arr.sort( (a,b)=>a-b ) console.log(arr) // 练习:使用匿名函数创建函数getAvg,传递任意3个数字,返回平均值;箭头函数代替匿名函数 var getAvg = (a,b,c)=>(a+b+c)/3 console.log( getAvg(70,80,85) ) </script> </body> </html>
三、Node.js概述
Node.js是JS运行在服务端的一种环境
3.1对比JS
- JS运行在客户端浏览器,有多种浏览器,存在代码兼容性问题;Node.js只有一种解释器,不存在代码兼容性问题
- 两者都有共同的自定义对象、内置对象,不同的宿主对象
- JS用于实现用户交互,Node.js使用服务器端开发,例如:其它服务器的调用,数据库的操作...
3.2网址
- 官网:Node.js
- 中文版:http://www.nodejs.cn/
3.3运行方式
- (1)脚本模式
node 拖拽js文件 回车
- (2)交互模式
在命令行下输入
node 回车 进入交互模式
两次 ctrl+c,或者 一次 ctrl+d--退出
3.4特点
单线程逻辑处理
四、全局对象
4.1global对象
- 检测一个变量(函数)是否为全局,全局变量或者全局函数会存储global对象下
- JS下的global对象名称为:window
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>全局对象window</title> </head> <body> <script> // 全局作用域 // 全局变量 var a = 1 // 全局函数 function fn(){ return 2 } console.log(window.a, window.fn()) </script> </body> </html>
4.2console对象
- 提供一组用于控制台输出的API
- console.log(1) //打印日志
- console.info(2) //打印消息
- console.warn(3) //打印警告
- console.error(4) //打印错误
- console.time() 开始计时
- console.timeEnd() 结束计时
- 说明 :开始计时和结束计时的参数要保持一致
/* console.log(1) //打印日志 console.info(2) //打印消息 console.warn(3) //打印警告 console.error(4) //打印错误 */ // 开始计时 console.time('xin') for(var i=1;i<=100000;i++){ } // 结束计时 console.timeEnd('xin') console.time('while') var j=1 while(j<=100000){ j++ } console.timeEnd('while') console.time('do-while') var k=1 do{ k++ }while(k<=100000) console.timeEnd('do-while')
4.3process对象
- 进程:计算机每一个软件都是一进程,都会有相应的资源占用
- process对象用来查看当前运行的Node.js进程
- process.arch 查看当前的CPU架构
- process.platform 查看当前的操作系统
- process.pid 查看当前的进程编号
- process.kill() 结束指定编号的进程
4.4Buffer对象
- Buffer:缓冲存储区,是内存中的一块区域,用于临时存储数据
// 创建Buffer,分配内存空间,单位是字节 var buf = Buffer.alloc(9,'abc新哥') console.log(buf) // 转为字符串 console.log( buf.toString() )
五、模块
- 每个文件就是一个模块,每个模块就是一个独立的功能
- module--当前的模块对象
- module.exports--当前模块暴露的对象,默认是一个空对象,要暴露的内容都是添加到这个空对象下
- require()--是一个函数,用于引入其它的模块,会得到暴露的对象
// 07_yan.js console.log('引入了新哥的眼睛') // 是局部变量,不能被其它模块直接使用 var a=1 // 是局部函数 function fn(){ return 2 } // 创建一个函数,传递任意两个数字,返回总和 // 把这个函数暴露出去 function add(n1,n2){ return n1+n2 } // 默认每个模块暴露的是一个空对象 // 暴露的对象 // 如果要让外部使用哪一个,就需要把哪一个给暴露出去 module.exports = { myA: a, myFn: fn, add: add }
// 07_tou.js // 引入同一级目录下的07_yan.js模块 // ./ 同一级目录下 // 引入模块成功后,得到的是另一个模块暴露的对象 var obj=require('./07_yan.js') console.log(obj) console.log(obj.myA, obj.myFn()) // 在主模块下调用暴露函数 console.log( obj.add(3,5) )
总结
node.jsday01学习结束