ES6自带严格模式
严格模式主要有以下限制
- 变量必须声明后再使用
- 函数的参数不能有同名属性,否则报错
- 不能使用with语句
- 不能对只读属性赋值,否则报错
- 不能使用前级0表示八进制数,否则报错
- 不能删除不可删除的属性,否则报错
- 不能删除变量delete prop,会报错,只能删除属性del
- eval不会在它的外层作用域引入变量
- eval和arguments不能被重新赋值
- arguments不会自动反映函数参数的变化
- 不能使用arguments.caller
- 禁止this指向全局对象
- 不能使用fn.caller和fn.arguments获取函数调用的堆模
- 增加了保留字(比如protected、static和interface);
数组遍历方法
- forEach
- map
- find (ES6)
- findIndex (ES6)
- filter
- some
- every
- reduce
- reduceRight
find 方法会把数组空位处理成undefined
let array = [0,,2]
array.forEach((item)=>{
console.log(item)
}) // 0 2
array.find((item)=>{
console.log(item)
}) // 0 undefined 2
findIndex 函数也是查找目标元素,找到就返回元素的位置,找不到就返回-1
filter 为数组中的每个元素调用一次 callback 函数,并利用所有使得 callback 返回 true 或等价于 true 的值的元素创建一个新数组。
let array=[1,2,"a"]
let arrayl = array.filter((item)=>{
return typeof item=="number"
})
console.log(array1) // 1 2
some 为数组中的每一个元素执行一次 callback 函数,直到找到一个使得 callback 返回一个“真值”(即可转换为布尔值 true 的值)。如果找到了这样一个值,some() 将会立即返回 true。
every 方法为数组中的每个元素执行一次 callback 函数,直到它找到一个会使 callback 返回 falsy 的元素。如果发现了一个这样的元素,every 方法将会立即返回 false。若收到一个空数组,此方法在一切情况下都会返回 true。
reduce 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
let array1 = [1, 2, 3, 4];
let number = array1.reduce((previous, currentValue) =>{
return previous + currentValue
}
console.log(number) // 10
reduceRight 方法对数组中的每个元素执行一个由您提供的reducer函数(降序执行),将其结果汇总为单个返回值。
redece,redeceRight第二个参数为previous默认值,默认是数组第一项
forEach map find (ES6) findIndex (ES6) filter some every 第二个参数是callback的this
Set
Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。如果传递一个可迭代对象,它的所有元素将不重复地被添加到新的 Set中。
利用Set中特性,我们可以用Set轻松实现数组去重
let arr = [1,1,2,3,3,3,4,undefined,NaN,NaN]
let n = new Set(arr)
console.log([...n]);
// [1, 2, 3, 4, undefined,NaN]
NaN之间被视为相同的值(尽管 NaN !== NaN)
set 方法
- add
- delect
- has
- clear
- size
add
默认去重,重复的无法添加
在Set对象尾部添加一个元素。返回该Set对象。
delect
移除Set的中与这个值相等的元素,返回Set.prototype.has(value)在这个操作前会返回的值(即如果该元素存在,返回true,否则返回false)。
has
返回一个布尔值,表示该值在Set中存在与否。
clear
移除Set对象内的所有元素。
size
返回Set对象的值的个数。
forEach
遍历的时候只有value值
keys / values / entries
都是遍历的value
let arr = [1, 2, 3, 9, NaN, undefined]
let n = new Set(arr)
for (let key of n.keys()) {
console.log(key)
}
Map
普通对象key值只能是字符串,非字符串key值自动转换成字符串
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值
键的相等
NaN 是与 NaN 相等的(虽然 NaN !== NaN),剩下所有其它的值是根据 === 运算符的结果判断是否相等。
Symbol
基本数据类型 通过函数执行得到 不能使用new执行
let value = Symbol();
console.log(value); // Symbol()
唯一值
// 传参 表示对当前Symbol值的描述
// 为了可读性和好区分
let value1 = Symbol("name");
let value2 = Symbol("name");
console.log(value1,value2) // Symbol(name) Symbol(name)
console.log(value1===value2); // false
不能进行运算因为不可以转数字 也不可以进行字符串拼接都会报错
可以转为布尔值
当做属性名的时候只能用[""]的形式
Object.getownPropertySymbols() 方法可以返回所有类型的键名
将所有的属性名是Symbol类型的key放在一个数组中
let a = Symbol("name")
let obj = {[a]:"前端"} console.log(obj[a]); // 前端 console.log(Object.getOwnPropertySymbols(obj)) // [Symbol(name)]