目录
前言
javaScript的标准——ECMAScript在不断发展,最新版ECMAScript 6标准(简称ES6)已经在2015年6月正式发布,ES6可以统称2015年后javascript所有最新版本,我们上节课介绍了ES6的部分特性,今天我们接着来介绍ES6剩下得特性。
一、新增的数据类型
1)Symbol数据类型
数据类型
基本数据类型
string number boolean null undefined
复杂数据类型
Object Array Math Date String Number Boolean ...
1.Symbol- ES6新增加的基本数据类型
2. ES6引入Symbol的原因:ES5的对象属性名都是字符串,很容易造成属性名冲突。比如,使用了一个他人提供的对象,想为这个对象添加新的方法,新方法的名字就有可能与现有方法产生冲突。
如果有一种机制,保证每个属性的名字都是独一无二的,这样就从根本上防止了属性名冲突。
3.Symbol 表示独一无二的值
4. 定义
let sym = Symbol(描述符)
描述符 => 描述当前symbol表示什么意义
2)Set数据类型
1.Set: 复杂数据类型
2. 作用:存储无序数据的集合
3.创建
let set = new Set() //空集合
let set = new Set([1,2,{name:'jack'}, function(){},'hello'])
4.属性和方法
1)size属性 用来获取集合中有多少个数据 set.size
2)add 用来向集合中追加数据 set.add('hello')
3)delete 用来删除集合中的某一个数据 set,delete()
4)clear 用来清空集合中的所有数据 set.clear()
5)遍历集合set forEach
set.forEach(function(item){
console.log(item)
}
6)借助运算符...实现set集合转arr数组
let set=new set([10,20,30])
let arr=[...set] //arr=[10,20,30]
5.特点:集合set中元素不能重复
6.应用:数组去重
数组去重的方法:
1.indexof或includes
定义一个新数组,存储不重复元素
遍历原数组, 判断新数组中是否存在原数组元素,如果不存,加入新数组
let arr = [1,2,1,2,4]
let newArr = []
arr.forEach((item)=>{
if(newArr.indexOf(item) == -1){
newArr.push(item)
}
})
2.双重for循环 + splice
for(let i = 0; i < arr.length; i++){
let item = arr[i]
for(let j = i+1; j<arr.length; j++){
if(item == arr[j]){
arr.splice(j,1)
j--
}
}
}
代码如下:(案例)
function test3(){
// let arr = [10,20,10,30,20]
// console.log(arr)
// let set = new Set(arr)
// arr = [...set]
// console.log(arr)
// 代码行数越少出错概略越低
let arr = [10,20,10,30,20]
arr = [...new Set(arr)]
console.log(arr)
}
test3()
3)MAP数据类型
1.Map:复杂数据类型
2.作用
是一个数据集合,是一个很类似于对象Object的数据集合
Map存储的数据也是key/value形式, key可以是任意类型
3. 创建
let map = new Map()
let map = new Map([ ['name','jack'], [100,18] ])
4.属性和方法
1)size属性 用来获取该数据类型中数据个数 map.size
2)delete 用来删除元素 map.delete('name')
3)set 用来添加元素 map.settrue,'成立')
4)clear 用来清除所有元素 map.clear()
5)get 用来获取元素 map.get('name')
6)has 判断集合是否有数据 map.has('name')
5. 特点:
查找存储在map中的数据,可以不用遍历,根据key直接获取
value = map.get(key)
代码如下:(案例)
function test3() {
let arr = [
{ name: '钢筋', value: 11 },
{ name: '水泥', value: 12 },
{ name: '混泥土', value: 13 },
{ name: '加气砖', value: 14 },
]
function test2() {
let map = new Map([
['name', 'jack'],
[100, 18],
])
console.log(map)
console.log(map.size)
//添加元素
map.set(true, '成立')
console.log(map)
//获取元素
console.log(map.get('name'))
//删除元素
map.delete('name')
console.log(map)
//判断集合是否有数据
let isHas = map.has('name')
console.log('isHas ', isHas)
}
// test2()
function test1() {
// Object对象属性名是字符串类型, 值可以任意类型
let obj = {
name: 'jack',
age: 18,
say: function () {},
}
}
4)for-of循环
1.for-of作用: 遍历数组, 字符串 Map;对象用 for-in
2.语法:
for(let v of arr){
//遍历数组 v:数组元素
}
let str = 'hellworld'
for(let v of str){
//v 字符
}
二、模块化语法
1.模块化语法 import / export
2.模块化概念
1) 每个js文件都可以看作一个模块 xx.js
2) 每个js模块中的内容与其它模块相互独立
3)模块间通讯
第一次方式
a.js 暴露模块
export 变量或方法名
b.js 引入模块
import {变量,方法} from './a.js'
index.html
<script type="module">
import {变量,方法} from './a.js'
</script>
第二方法
export default {
name:'jack'
}
import A from 'c.js'
三、js错误处理机制
1.js错误处理机制
javascript引擎负责执行javascript代码,
如果发现错误代码,抛出异常错误, 如果异常错误没有处理语句,继续向上抛,至到系统处理
系统处理方式: 终止程序执行,在控制显示异常错误信息
2.异常错误类型
每个异常对应一个异常对象
1)SyntaxError 语法错误
2)ReferenceError 引用错误
3)TypeError 类型错误
4)RangeError 值超出有效范围时发生的错误
3.自己捕获异常进行处理
try{
// 可能发生异常的代码
}catch(error){
console.log(error) //程序出错误才会执行
}finally{
//不论程序有无出错,都会执行
}
function test2() {
try {
const num = 100
num = 200
} catch (error) {
console.log('程序出错了 :')
} finally{
console.log('不论程序有无出错,都会执行')
}
console.log('结束');
}
test2()