认识Node
-
node.js的概念
- node.js是基于 chrom v8 引擎的 JavaScript 运行环境
-
Node.js 中 Javascript 的组成部分
- ECMAScript 核心 + 全局成员 + 核心 API 模块
- 全局成员:console、setInterval、setTimeout。。。
- 核心 API 模块:就是 Node 平台 单独提供的一些API,这些API是Node平台所独有的;
-
Node.js 环境中 运行 js 代码的两种方式。
- node 命令:直接使用 node 要执行的js文件的路径 来执行指定的JS文件,例---------在桌面上的文件夹->代开cmd命令行–>输入node js文件名.js–>按下回车键即可,写出文件名加粗样式前缀部分,按tab键课自动补全js问价全名
- REPL 环境 -----进入REPL环境 打开命令行 -->输入node–>回车–例如 1+1–按回车–就会在命令行显示结果
- 退出REPL 环境 --两次ctrl+c
ECMAScript 6常用语法
-
let(变量) 与 const(常量)
-
var 关键字定义的变量存在的问题
- 存在变量提升问题,和函数一样 会有预解析的问题
- 没有块级 { }作用域,容易造成变量污染,只有函数才能划分作用域
- 语法: var a = 3;
-
let 主要特性:
- 不存在变量提升问题,无预解析现象
- 只有定义之后才能使用此变量
- 有 { } 块级作用域(在for循环中会产生{ } 作用域)
-
const 主要特性:
- 不存在变量提升问题,无预解析现象
- 只有定义之后才能使用此变量
- const 定义的常量,无法被重新赋值{ for循环中可以}
- 当定义常量的时候,必须定义且初始化,否则报语法错误
- const 定义的常量,也有{ }块级作用域
-
-
变量的解构赋值
- 概念:就是把 某个对象中的属性,当作变量,给解放出来,这样,以后就能够当作变量直接使用了。
- 可以使用 : 为解构出来的变量重命名
// let变量的解构赋值 //使用let穿件一个对象名字为person let person = {name : '小明’,age : 18,gender : '男'}; //这是没有对解构出来的变量进行重命名操作,取用变量为原对象属性名 //① let {name,age,gender} console.log(name)//此处的name是变量,而不是对象的属性 console.log(age/gender)//此处的age/gender是变量,而不是对象的属性 //将对象中的属性当做变量解放出来,并且将用了 : 为解构出来的变量重命名,并且 //此时的name已经无法访问了,此时的name属性所代表的属性值已经赋予给了 //name111,就算再修改属性的值,但是解构出来的变量的值是不会再发生改变的 //② let { name : name111, age, gender } = person console.log(name)//此时 node环境运行它会报错 console.log(name111)//结果为 小明 //---------------------------- console.log(user.name);结果为 小明 //改变 user.name 的值 user.name = '小红'; console.log(user.name);//结果为 小红 console.log(name111);//结果还是为 小明,解构出来的变量的值不在随对象属性值的变化而变化;
- const定义的常量的解构
//const info = {tel : 10086,email : '10086@qq.com',address : 'shannxi'} //① 不进行重命名的解构,解构完毕后,无法再重新复制 const {tel,email,address}; console.log(tel); const { tel: mytel, email, myemail,address:myaddress} = info console.log(mytel);
3. 箭头函数(常用)
-
语法
-
定义普通的function函数
function show() { console.log('这是普通 function 定义的 show 方法') }
-
把方法定义为箭头函数(最完整的写法)
//普通函数 function add(x, y) { return x + y }; //将上面的add函数更改为箭头函数 // 匿名箭头函数 (x, y) => { return x + y }; var add = (x, y) => { return x + y }; // ---------------------变体1 var add = x => x + 10; console.log(add(1)); let result = add(5); console.log(result); // ---------------------变体2 var add = (x, y) => { console.log(x+y); }; var daa (x,y) => console.log; add(1, 2); // ----------------------变体3 var add = x => x + 20; console.log(add(3));
-
-
箭头函数,本质上就是一个匿名函数;
-
箭头函数的特性: 箭头函数内部的 this, 永远和 箭头函数外部的 this 保持一致;
-
变体:
- 变体1:如果箭头函数,左侧的形参列表中,只有一个参数,则,左侧小括号可以省略;
- 变体2:如果右侧函数体中,只有一行代码,则右侧的 { } 可以省略;
- 变体3:如果箭头函数左侧 只有一个 形参,而且右侧只有一行代码,则 两边的 () 和 {} 都可以省略
-
注意: 如果我们省略了 右侧函数体的 { },那么,默认会把 右侧函数体中代码的执行结果,当作箭头函数的调用结果 return 出去;
对象中 定义方法 和 定义属性 的便捷方式
-
传统定义对象的方法
``` let name = 'zs'; let age = 22; function show() { console.log('我是zs') }; var person = { name: name, age: age, show: show }; console.log(person) //这里的代码是定义了一个名为person的对象 //打印出来的内容为 var person = { name : 'zs', age : 22, show : [Function show] }; ```
-
第二种方法
``` let name = 'zs'; let age = 22; function show() { console.log('我是zs') }; var person = { name, age, show }; console.log(person) //这里的代码是定义了一个名为person的对象 //打印出来的内容也是一样的 var person = { name : 'zs', age : 22, show : [Function show] }; ```
-
书写方法的两种方式
``` let name = 'zs'; let age = 22; function show() { console.log('我是zs') }; var person = { name, age, show, say : function () { console.log("ok"); } }; console.log(person) //这里的代码是定义了一个名为person的对象 //打印出来的内容也是一样的 var person = { name : 'zs', age : 22, show : [Function : show], say: [Function : say] }; //简写方式为省略 : 和 function var person = { name, age, show, say () { console.log("ok"); } }; ```