ES6
es6模式主要有一下限制
1. 变量必须声明后在使用
2. 函数的参数不能有同名属性,否则报错
3. 不能使用with语句
4. 不能对只读属性赋值,否则报错
5. 不能使用前缀 0 表示八进制,否则报错
6. 不能删除不可删除的属性, 否则报错
7. 不能删除变量 delete prop,会报错,只能删除 delete global[prop]
8. eval不会再他的外层作用域引入变量
9. eval和arguments不能重新被赋值
var声明的变量会挂载在window上,而let和const声明的变量不会:
二、var声明变量存在变量提升,let和const不存在变量提升
三、let和const声明形成块作用域
四、同一作用域下let和const不能声明同名变量,而var可以
五、暂存死区
六、const
一旦声明必须赋值,不能使用null占位。
声明后不能再修改
如果声明的是复合类型数据,可以修改其属性
常量的含义是指向的对象不能修改, 但是可以改变对象内部的属性
// 为 axios 挂载 全局的请求根路径
axios.defaults.baseURL = '要挂载的地址'
Array.prototype.findIndex() https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex
findIndex() 方法返回数组中满足提供的测试函数的第一个元素的索引,否则返回 -1
语法: array.findIndex(callback[,thisArg])
参数: callback 针对数组中的每个元素,都会执行该回调函数,执行时会自动传入下面三个参数
element 当前元素 index 当前元素的索引 array 调用findIndex的数组
thisArg 可选 执行callback是作为this对象的值
作用:
解决回调地狱的问题
回调地狱,值的是回调函数中,嵌套回调函数的代码形式,如果嵌套的层级很深,就是回调地狱
回调地狱 不利于代码的阅读,维护和后期扩展
Promise 是一个异步操作,分为三种状态:Pending(进行中),Resolved(已完成,又称 Fulfilled)和Rejected(已失败)
特点:
一旦状态改变,就不会再变,任何时候都可以得到这个结果
与事件的区别:事件错过了的话再去监听 是得不到结果的
缺点
1.无法取消Promise 一旦新建 它就会立即执行 无法中途取消
2.如果不设置回调函数,Promise内部抛出的错误,不会反映到外部
3.当处于Pending状态是,无法得知目前进展到哪一阶段(刚开始还是即将完成)
创建形式
const p = new Promise(function(successCb,errorCd){ // 在这个function中定义具体的异步操作 })
filter()
includes()
Array.prototype.includes() https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
includes() 方法 是用来判断一个数组是否包含一个指定的值,根据情况,如果包含返回true,不包含返回false
注意:对象数组不能使用 includes方法来检测
语法: array.includes(valueToFid[,forIndex])
vlaveToFid 需要查找的元素值
fromIndex 可选
从fromIndex索引开始厂子valueToFid.如果为负数,则按升序从array.length+fromIndex的索引开始搜索(及使从末尾开始往前跳 fromIndex的绝对值个索引,然后往后搜寻)默认为0
for...of
for...of语句创建一个循环来迭代可迭代的对象, 在ES6中引入for...of循环, 一替代 for...in 和 forEach(), 并支持新的迭代协议, for..of 允许遍历Array(数组)、Strings(字符串)、Maps(映射)、Sets(集合)等可迭代的数据结构等
语法: for(let 自定义名称 of 数组名) { 循环体 }
for( variable of iterable) { statement } variable 每个迭代的属性值被分配给该变量 iterable 一个具有枚举属性并且可以迭代的对象
案例
var arr = [ { name:'nick', age:18 }, { name:'freddy', age:24 }, { name:'mike', age:26 }, { name:'james', age:34 } ]; for(var item of arr){ console.log(item.name,item.age); } 输出结果: nick, 18 freddy. 24 mike, 26 james, 34
for(let i 数组名) { 循环体 }
ES6数组去重
Set实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员),操作方法有:add(value)、delete(value)、has(value)、clear();遍历方法有:keys()、values()、entries()、forEach()
1.ES6----new Set方法const myArray = [1,1,2,3,2,4,5,6,5,7,8,6] console.log([...new Set(myArray)]) // 1 2 3 5 6 7 8
function aaa(array) { return Array.from(new Set(array)) } console.log(aaa([1,1,1,2,2,2,3,3,5])) // [1, 2, 3, 5]
findIndex() 方法
findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置。
findIndex() 方法为数组中的每个元素都调用一次函数执行:
- 当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数。
- 如果没有符合条件的元素返回 -1
注意: findIndex() 对于空数组,函数是不会执行的。
注意: findIndex() 并没有改变数组的原始值。
参数:
参数
|
描述
|
||||||||
function(currentValue, index,arr)
|
必须。数组每个元素需要执行的函数.
函数参数
|
||||||||
thisValue
|
可选。 传递给函数的值一般用 "this" 值。
如果这个参数为空, "undefined" 会传递给 "this" 值
|
示例:
const bookArr=[ { id:1, bookName:"三国演义" }, { id:2, bookName:"水浒传" }, { id:3, bookName:"红楼梦" }, { id:4, bookName:"西游记" } ]; var i=bookArr.findIndex((value)=>value.id==4); console.log(i);// 3 var i2=bookArr.findIndex((value)=>value.id==100); console.log(i2);// -1
find()方法
该方法主要应用于查找第一个符合条件的数组元素。它的参数是一个回调函数。在回调函数中可以写你要查找元素的条件,当条件成立为true时,返回该元素。如果没有符合条件的元素,返回值为undefined。
为true: 找到后立即返回。返回的结果为查找到的元素:
为false: 返回undefined:
filter()方法
filter()与find()使用方法也相同。同样都接收三个参数。不同的地方在于返回值。filter()返回的是数组,数组内是所有满足条件的元素,而find()只返回第一个满足条件的元素。如果条件不满足,filter()返回的是一个空数组,而find()返回的是undefined
示例:
var myArr = [1,3,4,5,6,3,7,4]; console.log(myArr.filter((value,index,arr)=>arr.indexOf(value)===index)); //[ 1, 3, 4, 5, 6, 7 ]
aaaa
该方法主要应用于查找第一个符合条件的数组元素。它的参数是一个回调函数。在回调函数中可以写你要查找元素的条件,当条件成立为true时,返回该元素。如果没有符合条件的元素,返回值为undefined。