人教版数学五年级下册全册精品课件:排版优美,设计新颖,希望这些图文并茂的优秀ppt课件对老师们教学有所帮助!
文件:url80.ctfile.com/f/25127180-542409851-ddb670
 (访问密码:551685)
以下内容无关:
简单说说ES6新特性
 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。 它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
ECMAScript和JS的关系 ECMAScript是标准,JS是实现
类似于HTML5是标准,IE,chrome是实现 例如国家定了医用口罩标准(需要过滤XX,等等各种参数),咱们买的正规口罩是实现
 目前ECMAScript除了JS还没别的实现,所以ECMAScript==JS也说得过去
 ES6发布于2015年发布,所以也可以叫es2015 去年的ES2021 是ES12 但是主要的改变是在es6,这几年的东西都增加的不多,所以把ES6以及以后的版本统称为es6也合理,ES2022也也即将推出
 今天对我目前所知的并且常用的一些做一个总结,适合处于新手村和即将走出新手村的兄弟观看学习,同时也欢迎各位大佬补充
1、声明变量
首先说说在没有es6之前存在的问题,也就是var的问题
可以重复定义
 无法限制修改,有些东西不会变化,没常量
 没有块级作用域,只有函数作用域
 变量提示带来的混乱
   es6新增了两个声明变量关键字,let和const 这两个关键字就是为了解决es5存在的问题
let
(1)let 声明变量时只在其块级作用域中有效
1 {
 2 let a = 10;
 3 var b = 1;
 4 }
 5 console.log(a); //出错 not defined
 6 console.log(b); //1
   在es5中如果要实现块级作用域,通常借助立即执行匿名函数来实现
1 (function(){
 2 var a = 1;
 3 }());
 4 console.log(a); //出错,not defined
   但是有了let之后,就可以解决这么问题
(2)没有变量提升
也正是如此,变量必须在声明后使用,否则就会报错,这里对比var经典的变量提升
//let
 console.log(a); //出错, not defined
 let a = 1;
 //var
 console.log(a); //undefined
 var a =1;
   (3)不可以在相同作用域内重复声明同一个变量,也包括不能和var,const变量名重复
复制代码
 let a = 1;
 let a = 1; //出错 let不可重复声明
var b = 1;
 let b = 1; //出错 let不可重复声明
const c = 1;
 let c = 1; //出错 let不可重复声明
 复制代码
   (4)在块级作用域内,若存在用let命令声明的变量,则所在区块对该变量形成封闭作用域,也就是该变量无视外部的同名变量。而又因为不存在变量提升,所以在该区块中,不能在声明前使用该变量。
var a = 1;
 if(true){
 a = 2; //出错 not defined
 let a;
 }
 var a = 1;
 if(true){
 a = 2; //var允许重复声明,而且变量提升,故a=2正常赋值
 var a;
 }
   const
const和let的区别在于const声明的变量不能修改,let声明的变量可以修改
复制代码
      const name = “🐻”;
 //name = ‘2’ //报错
    //但是也不是都不能变
    const person = {
        name:"🐻"
    }
    person.name="🐕";
    console.log(person)
 
//const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。
 //对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。
 //但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,
 //const只能保证这个指针是固定的(即总是指向另一个固定的地址),
 //至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。
 复制代码
 学会之后推荐声明变量时使用let,可以避免很多不必要的麻烦,const看个人需求
2、Symbol
ES6新增了一个基本数据类型:Symbol,至此ECMAScript的基本数据类型就有了6种: 字符串,数字,布尔,null,undefined,Symbol。
复制代码
 //Symbol 的定义不能使用new 他使用Symbol()函数生成
 let a = Symbol();
typeof a // “symbol”
//Symbol创建时可以传一个参数,表示对Symbol的描述
let s1 = Symbol(‘a’);
 let s2 = Symbol(‘b’);
s1 // Symbol(a)
 s2 // Symbol(b)
 复制代码
 Symbol表示独一无二的值
复制代码
 1 let s1 = Symbol(‘a’);
 2 let s2 = Symbol(‘a’);
 3
 4 //s1===s2 false;
 5 //既然Symbol的值都不相等 那么可以利用他的特性解决对象里同名覆盖的问题
 6
 7 let obj = {
 8 [Symbol()]: 1
 9 };
 10 //或者
 11 let s = Symbol();
 12 let obj = {
 13 [s]: 1
 14 };
 复制代码
 Symbol.for() 有时,我们希望重新使用同一个 Symbol 值,Symbol.for()方法可以做到这一点。 它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的 Symbol 值。 如果有,就返回这个 Symbol 值,否则就新建一个以该字符串为名称的 Symbol 值,并将其注册到全局。
复制代码
 1 let s1 = Symbol.for(‘a’);
 2 let s2 = Symbol.for(‘a’);
 3
 4 s1 === s2 // true
 5
 6 //两种写法区别
 7 Symbol.for(“a”) === Symbol.for(“a”) // true
 8
 9 Symbol(“a”) === Symbol(“a”) //false
 复制代码
 3、解构赋值(常用)
复制代码
 1 let [a,b,c] = [1,2,3]
 2 var [a,c]=[1,2,3];
 3 console.log(a+’ | ‘+c); //1 | 3
 4 var [a,…b]=[1,2,3];
 5 console.log(a+’ | ‘+b);//1 | 2,3
 6 console.log(b);//[2, 3]
 7 // …将右侧多余的值以数组的形式赋值给左侧变量 rest
 8
 9 //设置默认值
 10 var [a,b,c=‘default’,d=‘default’]=[1,2,3];
 11 console.log(a+’ | ‘+b+’ | ‘+c+’ | ‘+d);//1 | 2 | 3 | default
 12
 13 //找不到的会被赋值为undefined
 14 var [a,b,c]=[1,2];
 15 console.log(a+’ | ‘+b+’ | '+c);//1 | 2 | undefined
 复制代码
 对象的解构赋值
复制代码
 1 //对象的解构赋值
 2
 3 let obj={
 4 a:1,
 5 b:2
 6 }
 7 let {a,b}=obj;
 8 console.log(a+" | “+b);//1 | 2
 9
 10 //重命名,把obj.a重命名为A
 11 let obj={
 12 a:1,
 13 b:2
 14 }
 15 let {a:A,b}=obj;
 16 console.log(A+” | “+b);//1 | 2
 17 console.log(a);//Uncaught ReferenceError: a is not defined
 18
 19 //设置默认值
 20
 21 let {a=1,b=2}={a:10};
 22 console.log(a+” | "+b);//10 | 2
 23
 24 //字符串也可以解构
 25
 26 var [a,b,c,d,e]=‘nihao’;
 27 console.log(a);//
 复制代码
 4、函数默认值
复制代码
 1 //es5写法
 2 function sum(a,b){
 3 b= b||0;
 4 console.log(a+b)
 5 }
 6
 7 sum(1)
 8
 9 //es6
 10 function sum(a,b=0){
 11 console.log(a+b)
 12 }
 13 sum(1)
 14 function sum(a=2,b=0){
 15 console.log(a+b)
 16 }
 17
 18 sum()
 复制代码
 5、箭头函数(常用)
箭头函数都是匿名函数
复制代码
 1 function show(num){
 2 return numnum
 3 }
 4 var show = function(num){
 5
 6 return numnum
 7 }
 8
 9 //如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。 提个参数可以去掉括号
 10 var show =(num)=>{
 11 return numnum
 12 }
 13 //如果只有一条return语句,可以省略大括号和return 隐式返回
 14
 15 var show =num=>numnum;
 16
 17
 18
 19 //箭头函数的this继承自他的父作用域
 20 //而且与我们原来普通函数不同,原来的函数this是调用时动态指定的,
 21 //而箭头函数是词法作用域,他里的this是定义时就指定的 而且不会随着调用方式不同而改变
 22
 23 //如下例子
 24 var log_this = ()=>{
 25
 26 console.log(this)
 27 }
 28 var log_this = function(){
 29
 30 console.log(this)
 31 }
 32
 33 var obj = {
 34 hobbies:[‘code’,‘run’,‘paly game’],
 35 logHobbies:log_this
 36 }
 37
 38
 39 obj.logHobbies()
 40
 41
 42 log_this()
 复制代码
   有几点需要注意
函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
上面四点中,第一点尤其值得注意。this对象的指向是可变的,但是在箭头函数中,它是固定的。










