ES是什么?跟JS有什么关系
ES时ESMAScript的简称,
JS由三部分组成,ESMAScript,BOM,DOM,
ES是JS中的语法规范;
BOM全称Browser Object Model,浏览器对象模型,主要处理浏览器窗口和框架,提供了独立于内容而与浏览器进行交互的对象。
DOM全称Document Object Model,文档对象模型,是HTML和XML文档的编程接口;它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容。
let/const/var的区别
浏览器兼容ES6
安装node,用npm安装babel
npm install babel-core@5
引用babel
我们把browser.min.js引入(文件位置的路径要确保正确)。并且设置第二个script标签的type为”text/babel”。
解构赋值
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值(Destructuring)。
传统的变量赋值
var arr = [1,2,3]
var a = arr[0]
var b = arr[1]
var c = arr[2]
ES6解构赋值
var [a,b,c] = [1,2,3]
数组的解构赋值
解构赋值是可以嵌套的
var [a,b,[c1,c2]] = [1,2,[3.1,3.2]]
不完全解构赋值
var [a,b,c] = [1,2]
当左边的模式(你可以理解为格式)与右边不完全一样的时候,那么赋值过程中,只会给模式匹配成功的部分的变量赋值,例如:变量c没有在右边找到匹配的模式,所以无法进行赋值,但这并不影响变量a和变量b的赋值,因为它们在右边找到与之匹配的模式,这种叫做不完全解构。
允许设置默认值
var [a,b,c=3] = [1,2]
var [a,b,c=3] = [1,2,4]
这个时候默认值3会被新的值4覆盖,c的值为4;注意:当新的值为undefined的时候,是不会覆盖默认值的。
对象的解构赋值
var {a,b,c} = {"a":1,"b":2,"c":3}
var {a,b,c} = {"a":1,"c":3,"b":2}
这两段代码虽然有区别,但是结果都是一样的。
对象的解构赋值不会受到属性的排列次序影响(数组则会受影响),它是跟属性名关联起来的,变量名要和属性名一致,才会成功赋值。
var{ a } = {"b":2}
如果变量找不到与其名字相同的属性,就会赋值不成功
如果你想给一个变量名与属性名不一样的变量解构赋值,可以这样写:
var { b:a } = { "b" : 2}
这样变量a同样可以赋值成功,a的值最终为2
对象的解构赋值也可以嵌套
var { a:{ b } } = { "a" : { "b":1 } }
b的值为1
也可以指定默认值
var { a,b = 2 } = { "a" : 1}
b的值为2
字符串的解构赋值
var [a,b,c,d,e,f] = "我就是前端君"
a = 我
b = 就
c = 是
d = 前
e = 端
f = 君被转成了类似数组的对象
在解构赋值的过程中,将字符串
解构赋值的作用
1.交换变量的值
传统做法最常用的是引入第三个变量来临时存放
例:
var x = 1;
var y = 2;
var z = x;
x = y;
y = z;
解构赋值
var x = 1
var y = 2
[ x , y ] = [ y , x ]
2.提取函数返回的多个值
函数只能返回一个值,我们可以将多个值装在一个数组或者对象中,再用解构赋值快速提取其中的值
function demo ( ){
return { "name" : "张三" , "age" : 21 }
}
var { name , age } = demo()
3.定义函数参数
function demo ({a,b,c}){
console.log("姓名"+a)
console.log("身高"+b)
console.log("体重"+c)
}
demo({a:"张三",b:"1.72m",c:"50kg",d:"8000"})
通过这种写法, 很方便就能提取JSON对象中想要的参数,例如案例中,我们只需要获取实参中的:a,b,c,而不需要关其他的参数,
4.函数参数的默认值
先判断该参数是否为undefined,如果是代表没传,需要手动给它赋一个值。
但是有了解构赋值,一切都变得简单很多。
字符串的用法
模板字符串
`大家好,我是${Person.name},我来自${Person.hometown},我今年${Person.age}岁了,我的爱好是${Person.hobby},我明年就${Person.age + 1}岁了,我已经是${Person.age > 18 ? '成年人' : '未成年'}了。`
变量写在${}里
repeat()函数
将目标字符串重复N次,返回一个新的字符串,不影响目标字符串。
includes()函数
判断字符串中是否含有指定的子字符串,返回true表示含有和false表示未含有。第二个参数选填,表示开始搜索的位置
var name = "前端"
name.includes("前",1)
第二个参数为1,表示从第2个字符“端“开始搜索,第一个字符”前“的位置是0。
startsWith()函数
判断指定的子字符串是否出现在目标字符串的开头位置,第二个参数选填,表示开始搜索的位置
var name = "前端君"
name.startsWith("端",1)
第二个参数为1表示从第2个字符开始搜索。若要从第一个字符开始搜索,参数应该为0或者为空(默认从第一个字符开始搜索)。
endsWith()函数
判断子字符串是否出现在目标字符串的尾部位置,第二个参数选填,表示针对前N个字符。
stringRaw()函数
看函数名raw是未加工的的意思,正如这个函数的作用一样:返回字符串最原始的样貌,即使字符串中含有转义符,它都视而不见,直接输出。
数组的用法
Array.of()函数
将一组值,转换成数组。
Array.from()函数
可以将类似数组的对象或者可遍历的对象转换成真正的数组
find()函数
找出数组中符合条件的第一个元素
let arr = [1,2,3,4,5,6]
arr.find(function(value.index){
return value > 2;
})
看上面的代码,find()函数的参数是一个匿名函数,数组的每个元素都会进入匿名函数执行,直到结果为true,find函数就会返回value的值:3。倘若所有元素都不符合匿名函数的条件,find( )函数就会返回undefind。
findIndex()函数
返回符合条件的第一个数组成员的位置下标。
fill()函数
用指定的值,填充到数组。
let arr = [1,2,3]
arr.fill(4)
经过fill( )函数处理后的数组arr已经变成了[4,4,4];正如函数名fill(填充)一样。所有元素都被填充为数字4了。如果我想只填充部分元素可不可以呢?可以的,fill( )函数提供了一些参数,用于指定填充的起始位置和结束位置
let arr = [1,2,3]
arr.fill(4,1,3);
上面的代码中第2个参数和第3个参数的意思是:从位置1的元素开始填充数字4,截止到位置3之前,所以是位置1和位置2的元素被数字4填充了,得到的结果:[1,4,4]。
entries()函数
对数组的键值对进行遍历,返回一个遍历器,可以用for..of对其进行遍历。
keys()函数
函数作用:对数组的索引键进行遍历,返回一个遍历器。
values()函数
作用:对数组的元素进行遍历,返回一个遍历器。