ESMAScript6介绍,ES6是JavaScript语言的下一代标准,目的是让JavaScript语言编写复杂的大型应用,成为企业级语言。那么ECMAScript和JavaScript是什么关系呢?两者之间有什么联系?JavaScript的创造者Netscape将JavaScript提交给国际标准化组织ECMA,希望这种语言能够成为国际标准。次年,ECMA决定了浏览器脚本语言的标准,并将其命名为ECMAScript。由于某些原因,一是商标,二是该语言是由ECMA开发的,而不是Netscape。ECMAScript和JavaScript的关系是前者是后者的规范,后者是前者的实现。ES6let和const命令let命令:基本用法,ES6增加了let命令来声明变量,用法与var类似,但声明的变量只在let命令所在的代码块中有效。{让a=10;varb=1;}a//ReferenceError:aisnotdefinedb//1let和var声明了两个变量,然后在代码块外调用这两个变量,let声明的变量报错,var声明的变量返回正确的值。注意,let声明的变量只在它所在的代码块中有效。for(leti=0;i<10;i++){}console.log(i);//ReferenceError:iisnotdefinedvara=[];for(vari=0;i<10;i++){a[i]=function(){console.log(i);};}a[6]();//10使用let,声明的变量只在块级作用域内有效:vara=[];for(leti=0;i<10;i++){a[i]=function(){console.日志(我);};}a[6]();//6变量i是let声明的,当前i只在当前循环有效,所以每次循环中的i其实都是一个新的变量,所以最后输出6。var中没有变量提升。var中有变量提升,let中不会出现“变量提升”的现象。所以变量必须在声明之后使用,否则会报错。控制台日志(一);//输出undefinedconsole.log(b);//报错ReferenceErrorvara=1;letb=1;var声明的变量会被提升,变量已经存在没有赋值,但是如果没有值,会输出undefined。变量是用let命令声明的,不会发生变量提升。在声明变量之前,变量不存在。如果使用,会报错。用let声明的变量是可以修改的,而const一般用来声明常量,声明后不能再改变。让a=1;constb=2;a=3;b=3;//var命令声明的变量会引起变量提升。变量在声明前使用,其值是undefined,而let命令声明的变量没有变量提升,如果在声明前使用,会报错。临时死区,一个变量在块级作用域内用let声明之前,该变量是不可用的,称为临时死区。da='coding';if(true){//之前定义一个全局变量da,在block中重新定义一个daconsole.log(da);//错误ReferenceErrorletda;}不允许重复声明:let命令不允许重复声明同一个变量if(true){letda;让大;//报错}functionfunc(coding){//已经有变量名的形参letcoding;}func()//在报错的代码块中,该变量直到let命令才可用用于声明变量,称为临时死区。如果(真){temp='da';//ReferenceErrorconsole.log(temp);//ReferenceErrorlettemp;//TDZ结束console.log(temp);//未定义的温度=12;控制台日志(临时);//12}临时死区表示typeof不再是安全操作typeofx;//ReferenceErrorletx;变量x是使用let命令声明的,所以存在死区,使用这个变量会报错,对比一下,如果一个变量根本没有声明,使用typeof不会报错typeofdacoding//undefinedES6:vararr=[];for(vari=0;i<10;i++){arr.push(function(){console.log(i)})}arr.forEach(function(func){func()});//ES5vararr=[];for(vari=0;i<10;i++){func.push((function(value){returnfunction(){console.log(value);}}(i))}//ES6for(leti=0;i<10;i++){func.push(function(){console.log(i)的特点})}箭头函数:创建函数不需要function关键字,return关键字为省略,继承当前上下文的this关键字。let声明变量,const声明常量,都是块级作用域ES5没有块级作用域,var有变量提升。在let中,变量使用必须声明。箭头函数,定义时不用关键字function(),而是用箭头()=>来表示。模板字符String是字符串的增强版,用反引号(`)表示,可以用作为一个普通的字符串,可以定义多行字符串解构赋值,ES6允许按照一定的模式从数组和对象中取值,给变量赋值,for...of循环可以遍历数组,设置和地图结构。集合数据结构类似于数组,所有数据都是唯一的,没有重复值,是一个构造函数,class类继承,ES6在ES5中没有使用原型链实现继承,类概念的引入可以用于继承//基本用法constda1=function(参数1,参数2,...,参数N){函数声明}constda1=(参数1,参数2,...,参数N)=>{函数声明}//只有一个参数时,括号可选constda2=(单参数)=>{函数声明}constda2=单参数=>{函数声明}//没有参数时,括号不能省略constda3=()=>{函数声明}//当函数体只返回单个表达式时,花括号和return关键字可以省略constda4=()=>{returnexpression(single)}constda4=()=>expressionFormula(single)//函数体返回对象字面量表达式时,如果省略花括号和return关键字,返回值需要加上括号constda5=()=>{return{foo:'bar'}}constda5=()=>({foo:'bar'})//输出{foo:'bar'}constda6=()=>{foo:'bar'}//输出undefined,大括号被识别为代码块块级作用域:es5只有全局作用域和函数作用域,没有块级作用域:vartemp=newDate();functionf(){console.log(temp);if(false){vartmp="你好世界";}}F();//undefineddes6的块级作用域:functionf1(){letn=5;如果(真){让n=10;}console.log(n);//5}//IIFE写法(function(){vartemp=...;...}());//块级作用域写法{lettemp=...;...}在es5中,函数只能在顶层作用域和函数作用域中声明,不能在块级作用域中声明//Case1if(true){functionf(){}}//Case2try{functionf(){}}catch(e){}//ES5规定是非法的//ES5严格模式'usestrict';if(true){functionf(){}}//es6中引入了块级作用域报错,明确允许在块级作用域中声明函数//ES6严格模式'usestrict';if(true){functionf(){}}//不报错es6block-levelscope声明函数仅在使用花括号时建立//不报错'usestrict';if(true){functionf(){}}//报告错误'usestrict';if(true)functionf(){}箭头函数:使用箭头函数时,this指向的不是窗口,而是父窗口。arguments对象不能用,constructor不能用,new命令也不能用,否则会报错,yield命令也不能用。所以箭头函数不能再用作生成器函数。map和set的区别:set用于数据重组,map用于数据存储。set中的元素不能重复,只有没有键名的键值,类似于数组,可以遍历,有add、delete、has等方法。map的本质是键值对的集合,可以与各种数据进行遍历和转换。外观类class://定义classPoint{constructor(x,y){//构造方法this.x=x;//this关键字表示实例对象this.y=y;}toString(){返回'('+this.x+','+this.y+')';}}promise构造函数是同步执行的,then方法是异步执行的。函数Person(){this.age=10;setInterval(()=>{this.age++;//this正确指向p实例},100);}varp=newPerson();//1s后打印出来10this.param=1constfunc1=()=>console.log(this.param)constfunc2=function(){console.log(this.param)}func1.apply({param:2})//输出:1func2.apply({param:2})//输出:2解构赋值:let[a,b,c]=[1,2,3]//a:1b:2c:3let[a,[[b],c]]=[1,[[2],3]]//a:1b:2c:3let[a,,b]=[1,2,3]//a:1b:3let[a,...b]=[1,2,3]//a:1b:[2,3]let[a,b,...c]=[1]//a:1b:undefinedc:[]let[a,b=4]=[null,undefined]//a:nullb:4let[a,b=4]=[1]//a:1b:4let[a,b=4]=[1,null]//a:1b:null如果解构不成功,变量的值是undefined,解构指定默认值。如果解构变量对应的位置没有值,为空或undefined,默认值有效。let{a,b}={a:1,b:2}//a:1b:2let{c}={a:1,b:2}//c:undefinedlet{c=4}={a:1,b:2}//c:4let{a:c}={a:1,b:2}//c:1let{a:c=4,d:e=5}={a:1,b:2}//c:1e:5let{length}=[1,2]//length:2展开运算符:将数组转换为以逗号分隔的参数序列console.log(...[1,2,3])//123console.log(1,...[2,3,4],5)//12345[...document.querySelectorAll('div')]//[
- 1IFA 2016柏林消费电子展各大厂商趋势预测
- 2虚拟现实只能依赖大厂商吗?看极客们如何教你DIY一个独特的V
- 3这样的“校园云面试”你见过吗? 2020狐友全国校草大赛海选
- 4360揭露卫星安全隐患:数据裸奔、资源盗窃、各大厂商设备漏洞
- 52020年互联网春季招聘综述:“云面试”已成主流,百度、腾讯
- 6各大厂商“硬核”齐聚,人民战“疫”内容科技竞赛被点燃
- 7我有半年的淘宝运营经验,我去面试跨境电商助理,给我开底薪75
- 8全国技能大赛冠军面试大纲?
- 9跨境电商面试题及答案?
- 10面试官问道:“你找到了9000元,失主说少了1000元,你怎
- 11电商面试的优点和缺点是什么?
- 12比较软件开发人员的C#面试问题
- 13软件开发人员的十大C ++面试问题
- 14针对软件开发人员的C#面试问题的提示
- 15针对软件开发人员的基本PHP面试问题
- 16软件开发人员的常见PHP面试问题
- 17探索针对软件开发人员的Java面试问题
- 18针对软件开发人员的node.js面试问题的提示
- 19将Java面试问题与软件开发人员进行比较
- 20你有没有被HR骗去面试,而其实他们公司并不缺人?你的经验是什