#解构:从数组和对象中提取值,对变量进行赋值,这被称为解构 1 数组解构 let [a,[b,c],d]=[1,[2,3],4]; 形式要统一按次序排列的 let [a,b="JSPang"]=['技术胖'] console.log(a+b); //控制台显示“技术胖JSPang” 2 对象的解构赋值 let {foo,bar} = {foo:'JSPang',bar:'技术胖'}; 对象的属性没有次序,变量必须与属性同名,才能取到正确的值。 3 字符串解构 const [a,b,c,d,e,f]="JSPang"; console.log(a); console.log(b); console.log(c); console.log(d); console.log(e); console.log(f); #function jspang(first,...arg){} ...表示传入的参数不确定 第一个参数我知道,后面的不清楚。arg.length 返回的是你不知道的长度。 ``` function jspang(first,...ss){ // for(let i=0 ,i<ss.length,i++){ console.log(ss[i]);} for(let val of ss){ console.log(val); } } jspang(0,1,2,3,4,5,6,7); // 1 2 3 4 5 6 7 ``` #扩展运算符的用处:这样改变arr2的值,arr1的值不会改变了 ``` let arr1=['www','jspang','com']; //let arr2=arr1; let arr2=[...arr1]; console.log(arr2); arr2.push('shengHongYu'); console.log(arr2); console.log(arr1); ``` #字符串模版 以前 '+jspang+' 现在 ${jspang} let jspang='技术胖'; //let blog = '非常高兴你能看到这篇文章,我是你的老朋友'+jspang+'。这节课我们学习字符串模版。'; let blog = `<b>非常高兴你能看到这篇文章</b>,我是你的老朋友${jspang}。<br/>这节课我们学习字符串模版。`; //这里要注意用的符号 ` ` 不是单引号 里面支持标签 #字符串查找 let jspang='技术胖'; let blog = '非常高兴你能看到这篇文章,我是你的老朋友技术胖。这节课我们学习字符串模版。'; document.write(blog.indexOf(jspang)); // 返回的是索引位置 document.write(blog.includes(jspang)); // 返回的是true + 判断开头是否存在:blog.startsWith(jspang); // 返回的是true false + 判断结尾是否存在:blog.endsWith(jspang); # 复制字符串 document.write('jspang|'.repeat(3)); //打印3遍 jspang|jspang|jspang| #判断是否为数字Number.isFinite(a) 判断是否为整数Number.isInteger(a) 取整Number.parseInt(xxx)和浮点型转换Number.parseFloat(xxx) let a= 11/4; console.log(Number.isFinite(a));//true # Array.from(xxx)方法: JSON数组格式转换——JSON的数组格式就是为了前端快速的把JSON转换成数组的一种格式 let json = { '0': 'jspang', '1': '技术胖', '2': '大胖逼逼叨', length:3 } let arr=Array.from(json); console.log(arr) // [ 'jspang', '技术胖', '大胖逼逼叨' ] # Array.of(xxx)方法: 它负责把一堆文本或者变量转换成数组 let arr =Array.of(3,4,5,6); console.log(arr); // [3,4,5,6] let arr =Array.of('技术胖','jspang','大胖逼逼叨'); console.log(arr); // [ '技术胖', 'jspang', '大胖逼逼叨' ] #数组转换字符串 join()方法就是在数组元素中间,加了一些间隔,开发中很有用处。toString()方法,转换时只是是用逗号隔开了。 let arr=['jspang','技术胖','前端教程']; console.log(arr.join('|')); // jspang|技术胖|前端教程 let arr=['jspang','技术胖','前端教程']; console.log(arr.toString()); // jspang,技术胖,前端教程 # find( )实例方法: 如果找到符合条件的数组元素就回该元素,找不到返回undefined。 # findIndex() 函数也是查找目标元素,找到就返回元素的位置,找不到就返回-1。 + value:表示当前查找的值。 + index:表示当前查找的数组索引。 + arr:表示当前数组。 let arr=[1,2,3,4,5,6,7,8,9]; console.log(arr.find(function(value,index,arr){ return value > 5; })) // 6 console.log(arr.findIndex(function(value,index,arr){ return value > 5; })) // 5 # fill( )实例方法: 把数组进行填充,第二个是开始填充的位置,第三个是填充到的位置。 let arr=[0,1,2,3,4,5,6,7,8,9]; arr.fill('jspang',2,5); //第二位到第五位 console.log(arr); // [ 0, 1, 'jspang', 'jspang', 'jspang', 5, 6, 7, 8, 9 ] # for…of 循环: let arr=['jspang','技术胖','大胖逼逼叨'] for (let item of arr){ console.log(item); } # for…of 数组索引: 有时候开发中是需要数组的索引的,那我们可以使用下面的代码输出数组索引。 let arr=['jspang','技术胖','大胖逼逼叨'] for (let index of arr.keys()){ console.log(index); } # 对象的函数解构 直接把这个JSON格式数据当作参数,传递到函数内部进行处理 let json = { a:'jspang', b:'技术胖' } function fun({a,b='jspang'}){ console.log(a,b); } fun(json); // jspang 技术胖 # 数组的遍历方法 # 1.forEach forEach循环的特点是会自动省略为空的数组元素,相当于直接给我们筛空了。当是有时候也会给我们帮倒忙。 let arr=['jspang','技术胖','前端教程']; arr.forEach((item,i)=>console.log(i,item)); //0 'jspang' //1 '技术胖' //2 '前端教程' # 2.filter 他其实也有循环的功能 过滤、遍历 var arr = [1, 2, 3]; arr.filter(item => { // item为数组当前的元素 return item > 1; // [2, 3] }) # 3.some some() 方法会依次执行数组的每个元素:如果有一个元素满足条件,则返回true , 剩余的元素不会再执行检测。 var arr = [1, 2, 3]; arr.some(item => { return item ==2; // true }) var arr = [1, 2, 3]; arr.some((item, index, arr) => { // item为数组中的元素,index为下标,arr为目标数组 console.log(item); // 1, 2, 3 console.log(index); // 0, 1, 2 console.log(arr); // [1, 2, 3] }) # 4.map map在这里起到一个替换的作用 let arr=['jspang','技术胖','前端教程']; console.log(arr.map(x=>'web')); // [ 'web', 'web', 'web' ] # 5. every() every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。 var arr = [1, 2, 3]; arr.every((item, index, arr) => { // item为数组中的元素,index为下标,arr为目标数组 return item > 0; // true return index == 0; // false }) # ES6中对象 声明了一个obj对象,增加了一个对象方法add和一个对象属性name,然后在控制台进行了打印。 var obj={ add:function(val){ return val+10; }, name:'I am Jspang' }; console.log(obj.add(100)); console.log(obj.name); # 对象赋值 var obj = {}; //或者 var obj=new Object(); var key = "name"; var value = "张三丰" obj[key] = value; console.info(obj); // { name: '张三丰' } # 对象Key值构建 //有时候我们会在后台取出key值,而不是我们前台定义好的,这时候我们如何构建我们的key值那。比如我们在后台取了一个key值,然后可以用[ ] 的形式,进行对象的构建。 let key='skill'; var obj={ [key]:'web' } console.log(obj.skill); # 自定义对象方法 let key='skill'; var obj={ [key]:'web' } console.log(obj.skill); # Object.assign( )合并对象 var a={a:'jspang'}; var b={b:'技术胖'}; var c={c:'web'}; let d=Object.assign(a,b,c) console.log(d); # Set的声明 只能放数组 Set和Array 的区别是Set不允许内部有重复的值,如果有只显示一个,相当于去重。 let setArr = new Set(['jspang','技术胖','web','jspang']); console.log(setArr); //Set {"jspang", "技术胖", "web"} # Set值的 增 删 查 + setArr.add('前端职场'); + setArr.delete('前端职场'); + console.log(setArr.has('jspang'));//true + setArr.clear();//清空 # size属性可以获得Set值的数量。 + console.log(setArr.size); # set的循环 let setArr = new Set(['jspang','技术胖','web','jspang']); for (let item of setArr){ console.log(item); } let setArr = new Set(['jspang','技术胖','web','jspang']); setArr.forEach((value)=>console.log(value)); # WeakSet的声明 放对象 这里需要注意的是,如果你直接在new 的时候就放入值,将报错。里边的值也是不允许重复的 let weakObj=new WeakSet(); let obj={a:'jspang',b:'技术胖'} weakObj.add(obj); // 必须用add方法 console.log(weakObj); # 总结:在实际开发中Set用的比较多,WeakSet用的并不多,但是他对传入值必须是对象作了很好的判断,我们灵活应用还是有一定的用处的。 # map数据结构 取值get 删除delete size属性 查找是否存在has 清楚所有元素clear let json = { name:'jspang', skill:'web' } var map=new Map(); map.set(json,'iam'); // set 赋值 console.log(map); // Map { { name: 'jspang', skill: 'web' } => 'iam' } key => value console.log(map.get(json)); // iam ( get 取值 ) map.delete(json); // 删 console.log(map) // Map {} console.log(map.has('jspang')) // 查 #总结:map在现在开发中已经经常使用,它的灵活性和高效性是我们喜欢的。开发中试着去使用map吧,你一定会喜欢上它的。 # 用Proxy进行预处理 newn Proxy({},{}); var pro = new Proxy({ add: function (val) { return val + 10; }, name: 'I am Jspang' }, { get:function(target,key){ //get是在你得到某对象属性值时预处理的方法,三个参数 target:得到的目标值,key:目标的key值,相当于 对象的属性 console.log('come in Get'); return target[key]; }, set:function(target,key,value,receiver){ //set属性是值你要改变Proxy属性值时,进行的预先处理 target:目标值。key:目标的Key值。 value:要改变的值。 console.log(` setting ${key} = ${value}`); return target[key] = value; } }); console.log(pro.name); pro.name='技术胖'; console.log(pro.name); 输出: come in Get // 先输出了come in Get。相当于在方法调用前的钩子函数。 I am Jspang setting name = 技术胖 // set属性是值你要改变Proxy属性值时,进行的预先处理。 come in Get 技术胖 let target = function () { return 'I am JSPang'; }; var handler = { apply(target, ctx, args) { console.log('do apply'); return Reflect.apply(...arguments); } } var pro = new Proxy(target, handler); //apply的作用是调用内部的方法,它使用在方法体是一个匿名函数时。 console.log(pro()); // do apply // I am JSPang # class类的使用 class Coder{ name(val){ // 类的里面都是函数 console.log(val); return val; // 要注意return 的用法 } // 注意f这里没有逗号 , skill(val){ console.log(this.name('jspang')+':'+'Skill:'+val); // 这里的 this 指类本身 } constructor(a,b){ // constructor( )进行传参 this.a=a; this.b=b; } add(){ return this.a+this.b; } } let jspang=new Coder(1,2); // 实例化一个类 console.log(jspang.add()); # class的继承 class htmler extends Coder{ } let pang=new htmler; pang.name('技术胖'); # 模块化操作 + 1.export export var a ='jspang'; export function add(a,b){ return a+b; } 对应的导入方式 import {a,add} form './temp';//也可以分开写 + 2.export defalut export default var a='jspang'; 对应的引入方式 import str from './temp'; // 导入的时候没有花括号,然后系统允许你为它取任意名字