ES5 ES6(下)
对象以及函数的简写
对象的函数(属性简写)
var name = 'tom'
var obj = {
//第一个name为key 第二个name 指向外面的name 为value
//name:name key和value是一致的时候,可以简写
name
}
函数的简写(对象里面的函数的简写)
var obj = {
/* eat:function(){
console.log("hello)
}*/
// 简写 省略了function
eat(){
console.log('hello')
}
}
obj.eat() //打印hello
Object.is 判断两个对象是否是一个
Object.assign() 将后面的内容拷贝给第一个(浅拷贝)
//Object.is() 它是用来弥补 == 的不足 == 在对应的比较对象的时候,不会比较对象里的东西,而是直接对象的栈地址的值
//Object.is() 判断两个对象是否内容一致
var array1 = new Array()
var array2 = new Array()
console.log(array1 == array2); //false
console.log(array1 === array2); //false
//判断 这个两个内容是否是一个对象
console.log(Object.is(array1, array2)) //false
var number = NaN
console.log(number == NaN); //false
console.log(Object.is(number, NaN)); //true Object.is可以解决NaN==NaN的问题
//Object.assign() 复制
var obj = {
name: '李四',
age: "19",
users: {
hello: 'hello'
}
}
var obj1 = {}
Object.assign(obj1, obj) //被拷贝的放后面
console.log(obj1);
obj1.users.hello = '你好'
console.log(obj.users.hello); //你好 拷贝的对象只拷贝了第一层的值,第二层是拷贝引用
set (集合,伪数组)
//set 的特性 元素不能重复 数组去重 可以传参 传递的参数为数组
var set = new Set()
add 添加
delete 删除
clear 清除所有
forEach 遍历
has 判断是否存在
entries 返回对应键值对组成的set迭代器
keys 返回对应值对 组成的set迭代器
values 返回对应键对 组成的set迭代器
属性
size 返回对应的长度
数组去重
//数组去重
var array = ['a','a','b','c','a','b','c']
var arr = new Set(array)
//将set转为数组
console.log(Array.from(arr))
map (集合,伪数组)
构成是key value, key是唯一的 value不是 Map是一个很大的对象 里面存任意类型的值
//传参需要传递两个参数 一个key 一个value
var map = new Map()
方法
set 设置对应的key - value
get 通过对应的key来获取value
delete 通过key删除
clear清空
forEach 遍历 value - key - map
has 判断是否存在对应的key
entries 返回键值对 map迭代器
keys 返回key map迭代器
values 返回value map迭代器
属性
size 返回对应的长度
WeakSet 只能存储对象的set
所有的迭代器都有的方法 next
var map = new Map()
//map的构成是由key-value来构成的 key是唯一的,可以是任意类型 value也可以是任意类型
//增删改查
//添加数据 修改 set对应的值
map.set('name','jack')
map.set('name','tom')
map.set('name','lisa')
map.set('age','20')
map.set('sex','男')
//查数据 通过key来获取对应的值 get
console.log(map.get('name'))
//删除 delete 根据key来删除 清空clear
//map.delete('name')
//map.clear()
console.log(map.size)
console.log(map.has('name'))
map.forEach((v,key,map)=>{
console.log(v,key)
})
//values entries keys 返回的是map的迭代器 所有的迭代器都有的方法 next 下一个
console.log(map.keys())
//console.log(map.keys().next())
console.log(map.values())
console.log(map.entries())
Class类 (面向对象里面的内容)
//class 类名字 首字母必需大写
class Person{
//class里面的this指向new 的对象实例
//构造器 构造方法的容器 new Object() //调用的就是构造方法
//匿名的构造器
//name age是属于构造方法的形参
constructor(name,age){
this.name = name //this指向对象new的对象
this.age = age //new的对象实例的age属性 = 构造函数里面传递的age值
}
eat(){
console.log(this.name + "吃饭") //指向对象实例
}
}
//调用构造函数来new对象
var person = new Person("jack",18)
//调用对应的eat方法 eat来自于person这个类中
person.eat() //jack吃饭
constructor 构造器(在继承体系中,子类可以拥有父类所有非私有属性)
在继承的关系中, 如果需要在constructor 使用this那么必须先写super() super()指向对应的父类构造
//extends 表示继承关系
class Student extends Person{
constructor(){
super()
this.sex = '男'
this.name = '张三'
}
}
var student = new Student()
console.log(student.name) //自己没有的时候找父元素 自己有先找自己 name继承person中
student.eat()//继承于person类中 tom吃饭
console.log(student.sex) //打印自己的sex属性
extends表示继承关系
减少冗余代码 提高代码的可阅读性以及开发效率
es6新增的基础数据类型 (值类型)
Number String Boolean null undefined
新增BigInt 大整型 (解决数字有范围)
//大整型
var bigInt = BigInt("1234567891234567991234566799")
console.log(bigInt);
新增的Symbol (唯一的值)
//symbol 唯一的 独一无二的值
var n = Symbol()
var m = Symbol()
var j= Symbol('hello') //hello相当他的别名
//获取到对应的别名
console.log(j.description);
console.log(n)
//一般使用symbol来做区分 对象的key
var obj = {}
obj[n] = "hello"
obj[m] = "hi"
console.log(obj[n]);
console.log(obj[m]);