ES6(2)

ES6

字符串扩展:

  • includes(str),判断是否包含指定的字符串,返回的是布尔值,包含返回true,不包含返回false

    • include(“文件路径”):加载文件,不是字符串扩展
    • require(“文件路径”):加载文件,不是字符串扩展
    var str='qwerty';
    console.log(str.includes('t'));//true
    console.log(str.includes('we'));//true
    console.log(str.includes('a'));//false
    
  • startsWith(str),判断是否以指定的字符串开头,返回的是布尔值

    var str='qwerty';
    console.log(str.startsWith('q'));//true
    console.log(str.startsWith('qw'));//true
    console.log(str.startsWith('ty'));//false
    
  • endWith(str),判断是否以指定的字符串结尾,返回的是布尔值

    var str='qwerty';
    console.log(str.endWith('y'));//true
    console.log(str.endWith('ty'));//true
    console.log(str.endWith('ert'));//false
    
  • repeat(count),重复指定次数

    var str='qwe';
    console.log(str.repeat(3));//qweqweqwe
    

数值扩展

  • Number.isFinite(i),判断是否是有限大的数,返回布尔值

    console.log(1/0);//Infinity,无限大
    console.log(Number.MAX_VALUE);//1.7976931348623157e+308
    console.log(Number.isFinite(Infinity));//false
    console.log(Number.isFinite(3));//true
    
  • Number.isNaN(i),判断是否是NaN,返回布尔值

    • 一个数和NaN做计算,绝对返回的是NaN(not a Number)
    console.log(Number.isNaN(4+'12'));//false
    console.log(Number.isNaN('22'-'20'));//false
    console.log(Number.isNaN(NaN));//true
    
  • Number.isInterger(i),判断是否是整数,返回是布尔值

    • 后台语言中,小数就是小数,整数就是整数,不一样
    console.log(Number.isInterger(13.3));//false
    console.log(Number.isInterger(13));//true
    console.log(Number.isInterger(13.0));//true
    console.log(Number.isInterger(13));//true
    
  • Number.parseInt(i),将字符串转换为对应的数值

    • 碰到非数字就停止
    console.log(Number.parseInt(13abc));//13
    console.log(Number.parseInt(13abc45));//13
    console.log(Number.parseInt(abc45));//NaN
    
  • Math.trunc(i),直接去除小数部分

    console.log(Math.trunc(12.34));//12
    

数组扩展

  • Array.from(arr),将伪数组对象或可遍历对象转换为真数组

    • forEach:循环数组
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    。。。。。。
    Array.from(div).forEach(function(value,index){
    	console.log(value);
    })
    
  • Array.of(arr1,arr2,arr3),将一系列的值转换成数组

    let arr=Array.of(1,2,3,4,5);
    console.log(arr);//[1,2,3,4,5]
    arr.forEach(function(value,index){
    	console.log(value);
    })
    
  • find(function(value,index,arr){return true}),找出第一个满足条件返回true的元素,若是没有满足条件的元素就返回-1

    let arr=[1,2,3,4,5,6];
    let aaa=arr.find((value,index)=>value>4);
    console.log(aaa);//5
    
  • findIndex(function(value,index,arr){return true}),找出第一个满足条件返回true的元素的下标,若是没有满足条件的元素就返回-1

    let arr=[1,2,3,4,5,6];
    let a=arr.findIndex((value,index)=>value>4);
    console.log(a);//4
    let b=arr.findIndex((value,index)=>value>9);
    console.log(b);//-1
    

对象扩展

  • Object.is(obj1,obj2),判断两个数据的值是否完全相等

    console.log(Object.is('abc','abc'));//true
    console.log(Object.is(window,window));//true
    let a={
    	name:"张三",
    	age:10
    }
    let b={
    	name:"张三",
    	age:10
    }
    b=a;
    console.log(Object.is(b,a));//true
    
  • Object.assign(target,source1,source2…),将源对象的属性复制到目标对象上来

    • assign:分配,分派
    • (target(目标对象),source1(源对象),source2…)
    let obj1={
    	name:"张三",
    	age:10,
    	a:{
    		c:40
    	}
    }
    let obj2={
    	name:"张三",
    	age:33,
    	a:{
    		c:30
    	}
    }
    let qq = Object.assign(obj2(目标对象),obj1(源对象));
    console.log(qq);//
    
  • 直接操作__ proto __属性,

    let obj2={
    	name:"张三",
    	age:33,
    	a:{
    		c:30
    	}
    }
    
    let obj1={}
    boj1.__proto__=obj2;
    //将obj2的属性复制到obj1上来
    console.log(obj2.name,obj2.age);
    

深度克隆

JS堆栈和拷贝
  • 基本类型:存放在栈内存中的简单数据段,数据大小确定,内存空间大小可分配,string,布尔,number
    • 特点:存储的是该对象的真实数据,存储在栈里面
var num1=2;
var num2=num1;
console.log(num1,num2);//2,2
num2=3;
console.log(num1,num2);//2,3
//谁也不影响谁
  • 引用类型:存放在堆内存中的对象,变量实际保存的是一个指针(地址),这个指针指向另一个位置,每个空间大小不一样,要根据情况进行特定分配,object,array,function
    • 栈里存储的是地址,所以复制的是地址,也就是指针地址,而真实的数据是存储在堆内存中,两个指向的都是同一个堆内存,所以改变的是同一个堆内存
var obj={name:'111'};
var obj1=obj;
console.log(obj,obj1);//{name:'111'}{name:'111'}
obj1.name='222';//改变的是堆内存的值
console.log(obj,obj1);//{name:'222'}{name:'222'}
传值与传址
  • 传值会影响原来的值
  • 传址会影响原来的值
深拷贝
  • 不希望父子对象之间产生关联

  • 拷贝出来的内容,更改的时候,不回去影响原来的内容

  • object的容器是{}、array的容器是 []

    • 第一步:首先是分析,获取数据类型,是基本数据类型还是引用数据类型

      //获取数据类型的方法
      <script>
          var arr=[1,2,3,4];
          var a=132;
          var null=null;
          var un=undefined;
      	function getTypeof(obj){
              let result=Object.prototype.toString.call(obj).slice(8,-1);//截取,只要后面的部分
              /*if(result == 'null'){
                  return null;
              }else if(result == 'undefined'){
                  return undefined;
              }*/
              return result;
          }
          console.log(getTypeof(arr))//[Object Array]
          console.log(getTypeof(a))//[Object Number]
          console.log(getTypeof(null))//[Object Null]
          console.log(getTypeof(nu))//[Object Undefined]
      </script>
      
    • 第二步:引用数据类型中,分析是数组还是对象,

      • 数组的话定义一个 [] 的容器
      • 对象的话定义一个 {} 的容器
    • 第三步: 深度拷贝 clone

      <script>
          //-----------一维数组
          function getTypeof(obj) {
          let result = Object.prototype.toString.call(obj).slice(8, -1);
          //截取,只要后面的部分
          return result;
      }
      function copyclone(obj) {
          //box 设置一个保存容器
          let box;
          //获取数据类型
          let classes = getTypeof(obj);//Array
          //分析传过来的数据类型是什么
          if (classes == 'Object') {
              box = {};
          } else if (classes == 'Array') {
              box = [];
          } else {
              return classes;
              //如果是基本数据类型,直接就传出去
          }
          //循环遍历
          for (key in obj) {
              //获取每一个值
              var value = obj[key];
              box[key] = value;
          	}
          return box;
      	}
      	var arr = [1, 2, 3, 4, 5, 6];
      	var x = copyclone(arr);
      	console.log(x);//(6) [1, 2, 3, 4, 5, 6]
      	x[3]=13333;
      	console.log(x);//(6) [1, 2, 3, 13333, 5, 6]
      	console.log(arr);//(6) [1, 2, 3, 4, 5, 6]
      }
      //-------------------二维数组
      var arr = [1, 2, [3, 4, 5], 6];
          //需要递归
          for (key in obj) {
              //获取每一个值
              var value = obj[key];
              if(getTypeof(value)=='Object'||getTypeof(value)=='Array'){
                  box[key]=copyclone(value);
                  //递归返回的是函数调用处,从哪里递归就返回哪里
              }else{
               box[key] = value;   
              }
         }
      </script>
      

set和map

set容器:无序的,不可重复的多个value的集合,类似数组,但是成员都是唯一的,没有重复

一般数组有序且可重复

Set本身是一个构造函数,需要new实例化

  • Set()
  • Set(array)定义
  • add()添加,不可以添加里面已有的值,添加不上
  • size长度,并不是数组长度,就是个数
  • delete()删除
  • has()是否有空,返回布尔值
  • clear()清空
let set=new Ser([1,2,3,4,5,2,1,2,1])
console.log(set);//Set[1,2,3,4,5];
set.add(11);
console.log(set);//Set[1,2,3,4,5,11];
set.add(11);//再添加一次里面已经有的,是添加不上的
console.log(set);//Set[1,2,3,4,5,11];
console.log(set.size);//6//并不是长度
set.delete(1);
console.log(set);//Set[2,3,4,5,11];
console.log(set.has(2));//true
set.clear()
console.log(set);//Set[];
map() Map容器,无序的,key不可以重复的多个key-value的集合
  • Map(array)
  • set(key,valve) 添加
  • get(key) 获取
  • delete(key) 删除
  • has(key) 是否存在,返回的是布尔值
  • clear() 清空
  • size() 获取长度,大小
let map=new Map([
	['name','张三'],
	['age','20']
	['name','李四']
])
console.log(map);//Map(2){name 箭头 "李四",age 箭头 "20"}
//key一致时,他的的value,后面的会覆盖前面的
map.set(20,20);//添加
console.log(map);//Map(3){name 箭头 "李四",age 箭头 "20",20 箭头 20}
map.get('age');//20//获取
map/delete(20,20);//删除
map.has('sex');//false//是否存在
map.size();//key的个数
map.clear();//Map(0)

for…of 循环

  • 遍历数组
  • 遍历set
  • 遍历map
  • 遍历字符串
  • 遍历伪数组
  • 有[Symbol.iterator]这个机制的就可以用for…of
<script>
	let set=new Set([1,2,3,4]);
    for(x of set){
        console.log(x);
   }
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值