ES6Frist笔记

数据类型

USONB
undefined
String Symbol
object
null number
boolean


箭头函数
 如果只有一句话并且返回就是这个值 {}和return 都不用写
 

扩展运算符 

...就是把  ['x1','x2','x3'] 转为 'x1','x2','x3'

把数组转化为参数序列

同理 可以用来合并数组

const a = ['a','b']


const b = ['c','d']

const c = [...a,...b]  c = a.concat(b)

c的结果就是?["a", "b", "c", "d"]


同理 可以作为数组的克隆

const a = ['a','b']

const b = [...a] //如果有引用数据对象,那就是浅拷贝


同理 可以将伪数组转化为真正的数组

设 divs为为伪数组

通过 const turedivs = [...divs];

得到真数组  turedivs 

rest 参数 

用来代替arguments 
arguments 得到的是一个伪数组,也就是有索引读取没有数组特性 其实就是一个对象
rest得到的就是一个真数组,里面就是对应的参数值(提高了对参数的处理 如 filter some every map等)
rest 参数一定要放在最后

arguments

function a() 
{

console.log(arguments)

}

a('a','b','c') //得到一个arguments对象

/*
Arguments(3) ["a", "b", "c", callee: ?, Symbol(Symbol.iterator): ?]
0: "a"
1: "b"
2: "c"
callee: ? a()
length: 3
Symbol(Symbol.iterator): ? values()
__proto__: Object
*/


rest

function b(...args)//这个args 可以自定义,多个参数的话这个参数必须放最后
{

console.log(args);

}

b('a','b','c') //得到一个数组对象

/*
(3)?["a", "b", "c"]
0: "a"
1: "b"
2: "c"
*/


symbol
表示独一无二的值,类似字符串的数据类型

1 值唯一,用来解决命名冲突
2 不能与其他数据进行运运算
3 不能用 for... in来进行遍历 ,但是可以如果要读取到一个对象的 Symbol 属性,
可以通过Object.getOwnPropertySymbols()  {Object.getOwnPropertySymbols()方法的功能:返回对象中自有Symbol属性,原型链上属性不会被获取}
和 Reflect.ownKeys() 取到。

创建Symbol

let s = Symbol('adc')
let s1 = Symbol('adc')//成为函数
console.log(s) //Symbol(adc) 就是不给你看,其实是唯一的
console.log(s === s1)  //false 生成的都是唯一的所以不相等

还有一种
Symbol.for() 他会去全局找对应的这个名字的Symbol(),没找到再创建

let yellow = Symbol("Yellow");
let yellow1 = Symbol.for("Yellow");
yellow === yellow1;      // false
 
let yellow2 = Symbol.for("Yellow");
yellow1 === yellow2;     // true


遍历方法如下

  let s = {};
  let s1 = Symbol('k')
  s[s1] = "kk";
  console.log(Object.getOwnPropertySymbols(s))
  console.log(s[s1])
  console.log(Reflect.ownKeys(s))  
 
有一个方法Symbol.keyFor()

Symbol.keyFor() 返回一个已登记的 Symbol 类型值的 key ,用来检测该字符串参数作为名称的 Symbol 值是否已被登记。
let yellow1 = Symbol.for("Yellow");
Symbol.keyFor(yellow1);    // "Yellow" 就只有Symbol.for的可以被返回

Symbol 创建对象属性

第一种

let game = {
let methods = {
up: Symbol(),
down: Symbol()
}
game[methods.up] = ()=>
{
console.log("up方法")
}
game[methods.down] = ()=>
{
console.log("down方法")
}
}

第二种
 let game = {

[Symbol('up')] : ()=>
{
console.log("up方法")
}
[Symbol('down')] : ()=>
{
console.log("down方法")
}
}


迭代器

迭代器是一个统一接口,通过键为Symbol.iterator方法实现
迭代器用于遍历数据结构的指针

以下是可迭代的值:

Array
String
Map
Set
Dom元素(正在进行中)
我们将使用 for...of 循环

知识点
for ... in xx //返回的是那个序列号
for ... of xx //返回的是那个值

迭代过程
1 通过Symbol.iterator创建一个迭代器,并且指向第一个的位置
2 通过next方法指向下一个,next会返回  value 和 done两个属性
3 done 为 true就遍历结束了

const items = ["zero", "one", "two"];
const it = items[Symbol.iterator]();
 
it.next();
>{value: "zero", done: false}
it.next();
>{value: "one", done: false}
it.next();
>{value: "two", done: false}
it.next();
>{value: undefined, done: true}

数组自己就有iterator接口属性
其他要自己实现 Symbol.iterator 方法
实现方法如下
 const banji = {
    name: "终极一班",
    stus: [
      'aa',
      'bb',
      'cc',
      'dd'
    ],
    [Symbol.iterator]() {
      //索引变量
      let index = 0;
      return {
        next: () => {
          if (index < this.stus.length) {
            const result = { value: this.stus[index], done: false }
            //下标自增
            index++;
            //返回结果
            return result;
          } else {
            return { value: undefined, done: true }
          }

        }
      }
    }
  }
  for (let v of banji) {
    console.log(v)
  }


生成器(generator)

是一种返回迭代器的函数,用来实现异步编程
在function后面加个 * 如 function * a(){}
第一次调用就要用.next() 不然不顶用
然后可以在里面加 yield 就相当于暂停 每加一下next() 
就多执行一下 
  function* a() {
    yield '第一步'
    console.log('这是个生成器函数!!!');
    yield '第二步'
    console.log('这个是第二步的结果');
    yield '第三步'
    console.log('这个是第三步的结果');
  }
  // let aa = a();
  // aa.next();
  // a().next();
  // a().next();
  // a().next();
  //next()里面也可以传参数,作为上一个yield的返回值
  for (let g of a()) {
    console.log(g);
  }

Promise

1、主要用于异步计算
2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
3、可以在对象之间传递和操作promise,帮助我们处理队列

这一个主要就是实例,自己去看

然后就是 基本结构 

const p =new Promise(function(resolve,reject){
    // //成功调用 resolve
      // resolve(data);

    // //失败调用reject
      // let err = '数据读取失败'
      // reject(err)
});

p.then(value =>{
   console.log(value);
}),function(reason){
  console.log(reason)
}


Set集合

const set = new Set([1, 1, 2, 2, 3, 3]);

特点
1、Set 集合不会添加重复的成员。
2、Set 构造函数可以接受所有可迭代对象作为参数。


size属性:返回Set 集合的成员总数。
add(value) 方法:添加某个值,返回 Set 集合本身。
delete(value) 方法:删除某个值,返回一个布尔值,表示删除是否成功。
has(value) 方法:返回一个布尔值,表示该值是否为Set的成员。
clear() 方法:清除所有成员,没有返回值。

可以用for..of


  const arr = [1, 2, 2, 2, 3, 3, 4, 5, 6, 6];
  let arrs = new Array(...new Set(arr));
  console.log(arrs);

  const brr = [1, 2, 9, 8, 7, 6];

  //求交集
  let crrs = new Array(...new Set(arr)).filter(item => {
    return new Set(brr).has(item)
  }
  )

  // let crrs = [...new Set(arr)].filter(item => 
  //   new Set(brr).has(item)
  // )
  console.log("并集+", crrs)

  //求并集

  let drrs = [...new Set([...arr, ...brr])];
  console.log("并集+", drrs)
  
  
  
Map使用

Map 类似与对象,就是一个键值对集合,但是他键不只局限于字符串
也可以是对象之类的,也实现了iterator接口你懂的

API接口

1 size 返回函数个数
2 set 增加一个新元素,返回当前map
3 get 返回键值对象的键值
4 has 检测Map中 是否包含某个键值,放回Boolean值
5 clear 清空集合,返回 undefined


Class类对象

class 的本质是 function。是一个语法糖

   //构造方法,名字不能改
    constructor(brand, price) {}
    //定义个方法 
    call() {
      console.log("我可以打电话!!!");
    }

TIps 函数的对象不属于实例的对象(ps 属于类不属于实例对象)BUT 原型里面的会遗传

super get set  和JAVA不能说毫无关系,简直一模一样


数值扩展

0 Number.EPSILON 是 JavaScript表示的最小精度,他是一个数字你懂吧
怎么用呢 就是比较
function numbersequal(a,b){  
        return Math.abs(a-b)<Number.EPSILON;
    }

Number.isFinite 检测一个数是否是有限数
Number.isNaN 检测数值是否是NaN
Number.parseInt Number.parseFloat
字符串转数字 会删掉非数字的东西
Number.isInteger 是否为整数

Math.trunc 去掉小数
Math.sign 判断是正数负数还是零


对象方法扩张Object

Object.is 判断两个值是不是完全相等
   
Object.assign(a,b) 对象的合并,后面覆盖前面

Object.setPrototypeOf 设置原型对象
Object.getPrototypeOf 获取原型对象 
①所有引用类型都有一个__proto__(隐式原型)属性,属性值是一个普通的对象
②所有函数都有一个prototype(原型)属性,属性值是一个普通的对象
③所有引用类型的__proto__属性指向它构造函数的prototype


模块化

export //模块暴露
在js文件里面暴露一些东西
三种方式
在定义的前面直接加 export let school="sgg"
在最后统一暴露 export{school}
直接一开始圈住所有 
export default{
school:"sgg"
}


import
1 import* as xx from "xxx/xxx.js"   //通用导入
2 import {school as xx,teach} from "xxx/xxx.js" //解构赋值形式
// 对于上面第三种 特殊写法 而且必须取别名 
 import  {default as m3} from "xxx/xxx.js" 

3 import m3 from  from "xxx/xxx.js" //简便形式 针对默认暴露
说白了就是针对上面第三种那种

    
    


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值