ES6--基础语法(一)
一、支持环境:node.js完全支持,标准浏览器完全支持。
二、测试环境:
chrome下需要在script标签的最先开始的地方需要添加"use strict"。
firefox下需要在script标签的type="application/javascript;version=1.7"。
三、基本语法:
1.变量let:
1.不能重复申明变量(var 可以)。
2.没有预解析的过程。(var 有)。
console.log(a);var a = 2;//console.log();undefined; let会报错。
3.块级作用域的使用{ //块级作用域;代码块}
{//从代码块的开始到申明的这段区域----暂存死区 let a = 2; console.log(a);//可以访问; } console,log(a);//不可以访问。 应用:输出0-9;的数字; for(var i = 0;i < 10;i++) { setTimeout(function() { console.log(i);//会输出10次10, }); } for(let i =0; i < 10;i++) { setTimeout(function() { console.log(i); });//0-9; } for(var i = 0; i < 10;i++) { (function(i) {//闭包函数(自执行函数),循环一次执行一次,相似一{}块级作用域。 setTimeout(function() { console.log(i); }); })(i); }
2、常量const:不变的量。常量保存值的时候不能改变,保存的是一个对象的时候可以改变。
const a = 2; a=5;//会报错。 const b = { name = "assassion" };
b.name = "seafuwg";//对象的话可以修改。
3、解构赋值:es6 允许按照一定的规则,从数组和对象中取值,对变量赋值。(目前firfox支持词语法,chrome低版本不支持)
3.1 数组:按照顺序赋值。
var arr = [1,2,3]; var [a,b,c] = arr; console.log(a);//1 //eg: 值的交换 let x = 2; let y = 3; let [x,y] = [y,x];
3.2 对象:是按照键的名字赋值;方便从对象中取值,值的交换等
let obj = { fn : function() {}, name : "assassion", arr : [], obj1 : {} }; let {fn,name,obj1} = obj; console.log(fn,name,obj1);
4.字符串的扩展
4.1对一些特殊汉字,及表情的支持占四个字节的长度
var a1 = "𠮷"; console.log(a1.length); console.log(String.fromCodePoint(134071)); str.at();//找到对应的字符,有些浏览器不支持 String.codePointAt();//返回汉字所对应的码点(码值) String.fromCodePoint()//根据码点返回对应的汉字 str.repeat(n);//传递一个参数,表示字符串重复的次数
4.2 模板字符串:用反引号,在反引号中用${变量,常量,表达式,对象...}表示,是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。代码中的字符串用反引号(`)表示,如果需要引入变量则使用${变量名}, 在{}中可以进行运算,也可以引用对象属性。
var name1 = "assassion"; var age1 = 23; var str = "name:"+name1+" age:"+age1+""; console.log(str); var str1 = `name:${name1} age:${age1}`; console.log(str1);
4.3字符串查找的扩展方法:和indexOf语法规则基本相似,indexOf(),返回的是值或者-1。扩展的都是ture或者false;
4.3.1 str.includes();参数:
1、要查找的字符串
2、起始位置
返回布尔值,表示是否找到了参数字符串
let aa = "assassin"; console.log(aa.includes("i"));//true console.log(aa.includes("i",5));//true console.log(aa.includes("i",7));//false
4.3.2 str.startsWith()
参数:
1、要查找的字符串
2、起始位置
返回布尔值,表示参数字符串是否在源字符串的头部。
console.log(aa.startsWith("ass"));//true console.log(aa.startsWith("ass",3));//true console.log(aa.startsWith("ass",4));//false
4.3.3str.endsWith()
参数:
1、要查找的字符串
2、起始位置(针对的是n个字符)
返回布尔值,表示参数字符串是否在源字符串的尾部。
console.log(aa.endsWith("in"));//true console.log(aa.endsWith("i"));//false console.log(aa.endsWith("i",7));//true 字符串的索引都是从1开始。
5.数值的扩展
5.1 二进制和八进制的表示方法:0b和0o;
5.2 Math函数的扩展:
5.2.1. Math.trunc();去掉小数点,Math.trunc(1.92344) = 1;简单的去掉小数。
5.2.2. Math.sign();判断一个数是正数,负数,正0,负0;
5.2.3. Math.hypot(a,b);返回两个数的平方和的平方根(勾股定理)
6.数组的扩展
6.1 Array.from();//把类数组的数据转换成数组
var str1 = "assassin"; var str2 = [].slice.call(str1);//以前的方法 console.log(Array.from(str1)); console.log(Array.from(str2));
6.2 Array.of();//将一组参数转换成数组;类似于new Array(1,2,3,4,5);
var arr = Array.of(1,2,3,4,5);
6.3 arr.find();//找出第一个符合条件的数组元素。
找出第一个符合条件的数组元素
参数:
1、回调函数
2、回调函数内this的指向
遍历整个数组,遍历过程中调用回调函数,如果回调函数的返回值为true,则返回当前正在遍历的元素。如果所有元素都不符合条件则返回undefined
var array = [1,2,3,4,5,6,7,8]; var n = array.find(function(val,index) {//函数里面的参数1:遍历的元素,参数2:遍历的索引 return val < 4; });
console.log(n);//1
6.4 arr.findIndex();找出第一个符合条件的数组元素的位置
参数:
1、回调函数
2、回调函数内this的指向
遍历整个数组,遍历过程中调用回调函数,如果回调函数的返回值为true,则返回该数组元素的位置。如果所有元素都不符合条件则返回-1;和arr.find();方法用法相似,知识返回值不一样,返回的是数组的索引。
6.5 arr.fill();用来填充数组
参数:
1、填充的内容
2、起始位置
3、结束位置
let fillArr = [1,2,3,4,5,6,7,8]; let fillArr1 = fillArr.fill(9,fillArr.length+1,length+2);//这样是无法添加的超出原数组的长度,知识填充,改变里面的不是添加 let fillArr2 = fillArr.fill(9,9,10);//这样是无法添加的超出原数组的长度 let fillArr3 = fillArr.fill(9,7,8);//这样是无法添加的超出原数组的长度 console.log(fillArr2); //1,2,3,4,5,6,7,9
6.6 for of:遍历,只要有遍历接口就可以遍历。默认的对象是没有遍历接口的,会报错 undefined is not a function。
var arrForOf = [1,2,3,4,5,6]; for(let value of arrForOf) { console.log(value);//1,2,3,4,5,6 } for(let val in arrForOf) { console.log(val);//它返回的是索引 0,1,2,3,4,5 } //value:表示值,key: 表示键(索引); let arrKey = [1,2,3,4,5,6]; for(let key of arrKey.keys()) { console.log(key);//返回的索引 } for(let value of arrKey) {//默认的后面添加数组即可let value of arrKey.values(); console.log(value);//返回的索引 } //value:表示值,key: 表示键(索引);一起遍历 for(let [key,value] of arrKey.entries() ) { console.log(key,value); }
6.7 数组推导:ES6提供简洁写法,允许直接通过现有数组生成新数组,字符串也可以。谷歌不支持
var arrInfer = [for(value of arrKey) value*2];//还可以使用判断等。 console.log(arrInfer);//原来的2倍 var arrInfer1 = [for( i of arrKey) if(i > 2) i]; console.log(arrInfer1);//数组大于2的元素