ES6拓展API

1.对象API拓展

  is

        判断两个值是否相等 is(+0,-0);false   is(NaN,NaN) true    (NaN === NaN) false

// 1.is 判断两个值是否相等
console.log(Object.is(1,1));
console.log(Object.is(+0,-0));//返回false
console.log(+0 === -0);
console.log(Object.is(NaN,NaN));
console.log(NaN === NaN);

  assign

        1.两个参数 对象得复制 
    Object.assign(o,obj);将第二个参数得内容复制给第一个参数返回第一个参数
    针对于基本数据类型实现的是深拷贝 针对于引用数据类型实现得是浅拷贝
    obj = {
      name:"",
      age:12,
      clazz:{
        no:'1001'
      }
    }
    2.三个参数 对象合并
    Object.assign(o,obj,obj1);将后面两个对象合并到o对象中 返回o对象

// 2.assign方法 两个参数 代表的是复制对象 三个参数代表的是合并对象
/*** 两个参数 assign(目标对象,要复制的对象) 返回值返回也是目标对象* */
let o = {};
let obj = {name:'zhangsan',age:12,//对基本数据类型实现深拷贝  (对引用数据类型实现浅拷贝--半深拷贝)clazz:{no:'2023'}
}
let res = Object.assign(o,obj);//将obj对象复制给o对象 同时返回o对象
console.log(res,res===o,res===obj);
o.clazz.no = '2024';
console.log(o,obj);/*** 三个参数:合并对象 (o,obj1,obj2) 将后面对象进行合并合并到第一个对象中 返回第一个对象* */
let o = {name:'zhangsan'};
let obj = {age:12};
let obj1 = {gender:'male'};
let res = Object.assign(o,obj,obj1);//返回第一个参数
console.log(res,res===o);

  getPropertypeOf

        (目标对象) 获取原型对象

let obj = {name:"zhangsan",age:12
}
// 获取原型对象 getPrototypeOf 
console.log(obj.__proto__);
console.log(obj.constructor.prototype);
console.log(Object.getPrototypeOf(obj));
  setPropertypeOf

        (obj,新原型对象) 设置原型对象

/*** 设置原型对象 setPropertypeOf*/
let obj = {};
let obj1 = {name:'zhangsan',age:12};
Object.setPrototypeOf(obj,obj1);//将obj原型对象设置为obj1
console.log(obj.__proto__)
console.log(obj.constructor.prototype);//注意 获取不到新原型对象
console.log(Object.getPrototypeOf(obj));
  keys

        获取对象属性名组成数组

  values

        获取对象属性值组成数组

  entries

        获取对象属性名和属性值组成数组

  fromEntries

        将属性名和属性值组成数组转为对象

let obj = {name:'zhangsan',age:12,gender:'male'
}
console.log(Object.keys(obj));//获取obj属性名组成数组
console.log(Object.values(obj));//获取obj属性值组成数组
console.log(Object.entries(obj));//获取obj属性名和属性值组成二维数组
console.log(Object.fromEntries(Object.entries(obj)));//将对象属性名和属性值组成二维数组转为对象

2.数组API拓展

  静态方法:
    Array.from 将类数组转为数组
    Array.of 创建数组实例
  实例方法:
    find 查找数组元素 参数:回调函数(item,index,arr) 返回值:返回符合条件得第一个数组元素或者undefined
    findIndex 查找数组元素 参数:回调函数(item,index,arr)  返回值:返回符合条件得第一个数组元素索引或者-1
    includes 检测数组元素是否存在数组中 存在返回true  不存在返回false NaN 返回true
    flat 展开数组层级 扁平化数组  参数:n 或者 Infinity
    fill 填充数组 修改原数组 
    flatMap flat和map结合 
    keys 返回得都是迭代器对象 
    values  返回得都是迭代器对象 
    entries  返回得都是迭代器对象 

/*** 静态方法拓展 from of* 实例方法拓展 find findIndex flat keys values entries ....*/
// 1.将类数组对象转为数组对象 from  
function foo(){console.log(arguments,'类数组对象');console.log(Array.from(arguments));console.log([...arguments]);console.log(Array.prototype.slice.call(arguments,0))
}
foo(1,2,3,4)// 2.of 创建数组实例
let arr1 = new Array(10);
let arr = Array.of(10);
console.log(arr,arr1,arr instanceof Array);// 3.find 返回第一个满足条件得数组元素或者undefined  参数:回调函数
let arr = [1,2,3,4,5];
let res = arr.find(function(item,index,arr){return item>3
});
console.log(res);// 4.findIndex 返回第一个满足条件得数组元素索引或者-1  参数:回调函数
let arr = [1,2,3,4,5];
let res = arr.findIndex((item,index,arr)=>{console.log(item,index,arr);return item>5
});
console.log(res,arr);// includes 检测数组元素是否存在数组中 存在返回true 不存在返回false
let arr = [1,2,3,4,('hello'/2)];
console.log(arr.includes('2'));//针对于NaN优化
console.log(arr.includes(('hello'/2)));
console.log(arr.indexOf(('hello'/2)));// fill 填充数组  修改原数组
let arr = [1,2,3,4];
let res = arr.fill(8);
console.log(arr,res);/*** keys values entries  返回得是实现了迭代器接口对象  iterator */
let arr = [1,2,3,4,5];
console.log(arr.keys());
console.log(arr.values());
console.log(arr.entries());// flat方法 扁平化数组 数组层级展开 
let arr = [1,2,[3,4,5,[6,7,8,[9,10,[11]]]]];
console.log(arr.flat(1));
console.log(arr.flat(Infinity));// flatMap flat和map方法结合 需求 将数组展开 每个数组元素*2
let arr = [1,2,[3,4]];
let res = arr.flatMap((item,index,arr)=>{// console.log(item,index,arr)if(typeof item=='number'){return item * 2}else{return item.map((it)=>{return it*2})}
})
console.log(res);

3.类 

    构造函数另一种写法 创建对象模板 通过class创建类 

/*** 类看成构造函数得另一种写法 使用class关键字创建类 创建对象模板*/
class Person{// 类体默认会提供一个空的构造器 constructor(name,age,gender){/*** new关键字作用:* 1.创建Person类实例对象* 2.将this指向Person类实例对象* 3.执行函数体* 4.返回Person类得实例对象*/// 实例私有属性和私有方法this.name = name;this.age = age;this.gender =gender;this.say = function(){console.log(this,'查看this');}}// 写在类体中的方法就是实例公共方法 ---类似于写在原型对象中 Person.prototypesayName(){console.log(this.name)}
}
let p1 = new Person('zhangsan',12,'male');
let p2 = new Person();
console.log(p1);
p1.sayName();
console.log(p1.sayName === p2.sayName,'写在类体中 实例公共方法');
console.log(p1.say === p2.say,'实例私有方法--写在构造器中');
console.log(p1.constructor);


      实例公共方法 相当于写在Person.prototype 
      sayName(){

      }

class Person{// 使用static关键字声明类得方法和属性  静态方法和静态属性 只能由类本身访问static PersonAttr = 'Person静态属性';static PersonMethod = function(p){console.log('Person静态方法');return p instanceof Person}// 默认提供一个空的构造器 constructor(){}
}
let p1 = new Person();
// console.log(p1.PersonAttr);
// console.log(p1.PersonMethod(p1));
console.log(Person.PersonAttr,'静态属性');
console.log(Person.PersonMethod(p1),'静态方法');

       写在类体中属性也是私有属性
      test = 'hello';
      firends = [];
      静态属性  只能由类本身去调用属性  Person.xxx = '' Person.method = function(){}
      static attr = '静态属性'
      static method = '静态方法'

class Person {constructor(name, age, gender) {// 写在构造器中属性和方法是实例私有属性和方法this.name = name;this.age = age;this.gender = gender;// this.test = xxx// this.friends=xxx}// 写在类体中得方法是实例公共方法 相当于写在Person原型对象中sayName() {console.log(this.name)}// 写在类体中得属性是是实例私有属性test = 'hello';friends = [];static attr = 'Person类静态属性';static method = function(){console.log('Person类静态方法');}
}
let p1 = new Person('terry',18,'male');
let p2 = new Person('larry',20,'female');
p1.sayName();//terry
p2.sayName();//larry
console.log(p1.sayName === p2.sayName);//true
p1.friends.push('tom');
console.log(p1.friends === p2.friends);//false
p1.test='我被修改了';
console.log(p1.test === p2.test);//false

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/210437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音乐曲谱软件Guitar Pro 8.1.1 破解版下载和网盘补丁

Guitar Pro 8.1.1 for Mac 中文破解版是一款功能强大的音乐曲谱软件,非常适合学习如何玩,改进技巧,重现喜爱的歌曲或陪伴自己。可以帮助我们进行吉他的学习、绘谱与创作,它包含了几乎所有的吉他现有指法及音色,在做弹拨…

角谷定理 C语言xdoj32

角谷定理定义如下: 对于一个大于1的整数n,如果n是偶数,则n n / 2。如果n是奇数,则n 3 * n 1,反复操作后,n一定为1。 例如输入22的变化过程: 22 ->11 -> 34 -> 17 -> 52 -> 26 …

电源小白入门学习3——电源系统常见元件选型MOS管、二极管、电感篇

电源小白入门学习3——电源系统常见元件选型MOS管、二极管、电感篇 MOS管二极管电感 书接上文,上一期我们讲了电阻、电容选型中需要注意的事项,下面我们接着来介绍MOS管和二极管。 MOS管 关于MOS管的基本原理和内部的一些结构,PN结、半导体的…

FPGA 低延时 TCP UDP IP协议栈兼容1G 10G 25G MAC

在计算和数据中心、军事和航天、政府、仪器与测量、金融服务和广播和视频等行业,需要高可靠性的硬件和软件产品,帮助客户更快地开发部署新一代产品,减少技术和市场风险,我司研发的低延迟TCP/IP的IP核的传输速率高于传统网口&#…

游戏Undercut使用python代码实现

游戏Undercut是一个纸牌游戏,两位选手各有编号1-5的5张牌。每一轮中每个玩家选择一张牌,然后依次出示各自的牌。如果两张牌数相同,则没有比分。另有两种情况:两张牌的数字只相差1(这就是所谓的Undercut游戏&#xff09…

【工具类】Excel 多 Sheet 导入工具类

使用反射封装,实现统一读取 import cn.afterturn.easypoi.excel.annotation.Excel; import cn.afterturn.easypoi.excel.annotation.ExcelTarget; import cn.hutool.core.annotation.AnnotationUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.…

创建个人网站(一)从零开始配置环境,搭建项目

目录 前言配置环境前端后端遇到的问题1.安装了nvm和node,vscode没反应2.安装完脚手架之后vue指令不存在 前言 从刚开始学前端的html直到现在前后端都有在开发,我一直都有一个想法,就是创建自己的网站,我相信大家都有这个想法&…

uni-app 设置当前page界面进入直接变为横屏模式

首先 我们打开项目的 manifest.json 在左侧导航栏中找到 源码视图 然后找到 app-plus 配置 在下面加上 "orientation": [//竖屏正方向"portrait-primary",//竖屏反方向"portrait-secondary",//横屏正方向"landscape-primary",//横屏…

99、NeRF ray space

CG相机模型 在图形学中最常用的相机模型的原理和小孔成像是类似的。 不同之处在于,如上图,小孔成像得到的图像是倒立的,但是我们希望得到的图像是正向的,因此,我们选择小孔前成像。 从 3D 到 2D 的投影,…

Grad-CAM原理

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 只要大家一提到深度学习 缺乏一定的解释性 比如说在我们之前讲的分类网络当中 网络它为什么要这么预测 它针对每个类别所关注的点在哪里呢 在great cam这篇论文当中呢 就完美的解决了在cam这篇论…

java多线程(常用方法、实现方式、线程安全问题、生命周期、线程池)

多线程相关的三组概念 程序和进程 程序(program):一个固定的运行逻辑和数据的集合,是一个静态的状态,一般存储在硬盘中。简单来说就是我们编写的代码 进程(process):一个正在运行的…

Python 中的 queue 模块队列详解;队列如何使用——如何处理信息在多个线程间安全交换的多线程程序?

queue 模块即队列,特别适合处理信息在多个线程间安全交换的多线程程序中。下面我们对 queue 模块进行一个详细的使用介绍。 1 queue 模块定义的类和异常 queue 模块定义了以下四种不同类型的队列,它们之间的区别在于数据入队列之后出队列的顺序不同。 …

cmake编译数据库

在使用CMake进行编译时,如果你想生成编译数据库,你可以定义CMAKE_EXPORT_COMPILE_COMMANDS选项。具体的命令如下: cmake -DCMAKE_EXPORT_COMPILE_COMMANDS1或者在CMakeLists.txt显示的使能配置 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)这将会…

游戏玩家升级不伤手之选,光威龙武系列超强性能

得益于国产存储芯片的崛起,现在的内存条价格太香了。要放在前几年,购买内存条时都会优先考虑国际一线品牌。随着内存条行业发生巨变,国产品牌光威GLOWAY,是全球前三的内存模组厂商嘉合劲威旗下品牌,它推出的内存条产品…

Zebec 推出由 Visa、万事达网络支持的即时支付卡,加密支付新征程

“Zebec现已推出全新的加密支付卡,该卡由Visa、万事达网络支持,具备即时、多链、非托管、无需KYC、免费等特性,其能够通过加密钱包与多条主流公链链接并直接调用支付,这将是加密支付领域的里程碑事件。” 在2023年的12月8日&#…

C++中的string容器的substr()函数

一、作用 用来截取某段字符串。 二、头文件 #include<string> 三、参数与用法 形式&#xff1a;s.substr(pos, len) 第一个参数是想要截取的字符串初始位置&#xff0c;第二个参数是截取字符串长度。 直接来说&#xff0c;就是从s[pos]开始截一个长度为len的子串。…

【python交互界面】实现动态观察图像在给定HSV范围的区域显示

HSV颜色空间 与RGB颜色空间相比&#xff0c;HSV颜色空间更适合进行颜色分析和提取特定颜色的目标。在HSV空间中&#xff0c;颜色信息被分布在不同的通道上&#xff0c;使我们能够更准确地定义颜色的范围&#xff0c;并使用阈值操作轻松地分离出我们感兴趣的区域部分。 HSV三个通…

二叉树查找值为x的结点(C语言)

目录 前言 查找值为x的结点 返回值为指针 返回值为布尔类型 整体代码 前言 在二叉树结点个数、叶子结点个数、树的高度、第k层结点个数的计算&#xff08;C语言&#xff09;中&#xff0c;我们解决了关于二叉树的部分问题&#xff0c;但是还有一个问题我们放在本篇解决。 …

数据集成和人工智能驱动的见解

数字时代使数据成为人们关注的焦点&#xff0c;将其从单纯的二进制序列转变为有价值的组织资产。随着企业越来越多地转向数据驱动战略&#xff0c;数据管理的复杂性也随之增加。当前的任务不仅仅是存储甚至收集数据&#xff0c;而是将其转化为可操作的情报。本博客旨在剖析寻求…

Python中的selenium安装的步骤(浏览器自动化测试框架)

一、前言 我们今天要安装的selenium 就是浏览器自动化测试框架&#xff0c;是一个用于Web应用程序的测试工具&#xff0c;就是模拟用户操作。支持的浏览器包括Chrome&#xff0c;IE&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Opera等。今天我们以Chrome为例讲…