前端面试题总结---ES6新特性
ES6新特性
一、let,const
$(function(){ //es6 ECMAscript规范,js实现 //let const var === 声明变量 var a = hello; let b = hi; // 1.不存在变量提升 console.log(c); var c = c; === // var c;(此处为js预解析,隐含存在,上面的代码执行中隐藏着这个。) console.log(c); var c = c; --- // 若var,执行结果为undefined;不是c也不会报错 // 若let,则会报错,let不存在预解析【error】 // 2.同一个作用域下不能重复定义同一个名称 var d = 1; var d = 100; console.log(d); // 若var,执行结果为100,var定义的可以覆盖之前的 // 若let,执行结果报错,不可再次定义【error】 let d = 1; d = 100 ; console.log(d); // 这种情况为修改,执行结果为100 // 3.有着严格的作用域 var属于函数作用域;let属于块级作用域 function fun(){ var n = 10; if(true){ var n = 100; }; console.log(n) }; fun() // var 执行结果为100,后面的会覆盖前面的;用var定义,则在function类中整个函数体内都会作用;因此用var的时候需要注意,不要和全局变量命名相同了,否则局部的会覆盖掉全局的。 // let 执行结果为10,以{}为一个块级作用域,此处不报错是因为二者不在同一个作用域下,分别执行。 })
ps:js预解析功能,按照浏览器的功能会提前将命名的变量提前解析,然后再逐步加载代码执行。
// 1. const 声明一个只读的**常量**,一旦声明,常量的值就不能改变 const w = 100; w = 200; console.log(w) // 执行报错【error】 // 2. const 一定要初始化,不能只声明不赋值 const r; // 报错【error】 // 3. 数组、对象等引用型,定义时相当于定义了一个内存地址,可以对其中的值改变. const obj = { }; boj.name = amy; console.log(obj) // 执行结果为{name:amy} const arr = []; arr.push(1);
ps:常量:字符串、数值、布尔型等
二、箭头函数
-
简化了函数的定义 箭头函数中对应的this的指向,指向的是定义的时候而不是执行的时候。
// 若不需要传参的时候,不需要加() let f = v => v; // 变量名=参数=>返回值(函数体) === var f = function(v){ return v; } // 若对应多个或0个传参的时候需要加() let f2 = () =>123; === var f = function(){ return 123; } let f3 = (n1,n2) =>n1+n2; === var f = function(n1,n2){ return n1+n2; };
三、新增数据类型:set、map
// set 类似于数组,成员是唯一的 // map 类似于对象,键并不是单纯的字符串,类型更多 const s = new Set(); s.add(1); s.add(2).add(3).add(4);//支持链式添加 s.add(2).add(3).add(4).add(2);//这样的情况下不会打印最后的2,因为set中成员是唯一的,去重处理了。 /** 例子:对var arr=[2,3,4,5,6,6,3,4,5] 去重处理 var arr2 = [...new Set(arr)]; */ // map 以键值对的形式添加值 const m = new Map(); m.set(name,amy).set(age,18); for(let [key,value] of m){ }
五、留言板实例
$(function(){ const m = new Map(); // 提交留言 $(".submit").click(()=>{ let _name = $(".name").val(); _msg = $(".message").val(); m.set(_name,_msg); listShow(); }); // 展示留言 let listShow = () =>{ let str = ""; for(let [key,value] of m){ str += `<li class="list-group-item">${ key} <sapan>说:</sapan>${ value} </li>` }; $(".messageList").html(str); } })
上一篇:
Java基础知识总结(2021版)
下一篇:
前端面试——作用域链、原型链、闭包