ES6基础语法

news2024/11/28 8:49:44

目录

解构

数组解构

对象解构

 基本数据解构

对象

对象简写

箭头函数

扩展运算符

函数参数解构

 对象API拓展

Object.is()

Object.assign()

Object.getPrototypeOf()

Object.setPrototypeOf()

Object.keys() Object.values() Object.entries()

Object.fromEntries()

 数组方法拓展


解构

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构,解构的本质属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。如果解构不成功,变量的值就等于undefined。

数组解构

// 等号左右两侧模式匹配才可以进行解构
// 完全解构
let [a,b,c] = [1,2,3];
console.log(a,b,c);
let [d,e,f,g,h] = [1,2,3,[4,5],6];
console.log(d,e,f,g,h);
// 不完全解构
let [i,j,[k],l] = [1,2,[3,4,5],6];
console.log(i,j,k,l);
// 集合解构
let [m,...n] = [1,2,3,4,5];
console.log(m,n);
// 默认值解构
let [o,p=1,q] = [];
// let [o,p=1,q] = [1,2,3];
console.log(o,p,q);
// 默认值可以是函数
function test(){
    console.log('hello');
}
let [r=test(),s] = [1,2];
console.log(r,s);
let [t=test(),u] = [];
console.log(t,u);   //函数没有返回值 是undefined

对象解构

// 等号左右两侧模式匹配才可以进行解构
// 对属性解构 变量名和函数名必须相同

// 1
// let {name,age} = {name:'jemmy',age:21};
// console.log(name,age);
// 完全写法
// let {name:name,age:age} = {name:'jemmy',age:21};
// console.log(name,age);

// 变量名和属性名不同 给属性名重命名
// let {name:name1,age} = {name:'jemmy',age:21};
// console.log(name1,age);

// 嵌套解构
// let obj = {p:['hello',{y:"world"}]};
// let {p:[a,{y:b}]} = obj;
// console.log(a,b);

// 默认值解构
// let {x:y=3} = {}
// console.log(y);

// 集合解构
// let {a,b,...c} = {a:1,b:2,d:3,e:4};
// console.log(a,b,c);

// 练习
const [a,b,c,...d] = [1,2,3,11,999];
const {e,f,f1,g,...h } = {f:4,g:5,i:6,j:7};
console.log(a,b,c,d,e,f,f1,g,h);
结果:1,2,3,[11,999],undefined,4,undefined,5,{i:6,j:7}

 基本数据解构

// 字符串
let [a,b,c,d,e] = 'hello';
console.log(a,b,c,d,e);
let [...arr] = 'world';
console.log(arr);

let {toString,valueOf,length} = 'hello';
console.log(toString,valueOf,length);

// 数字
// let {toString,valueOf} = 10;
// console.log(toString,valueOf);

// 布尔值
// let {toString,valueOf} = true;
// console.log(toString,valueOf);

对象

对象简写

ES6中规定可以直接在对象中写入变量和函数作为对象的属性和方法,此时属性名为变量名, 属性值为变量的值。对象简写在未来的使用频率极其高。

let name='larry';
	let age=12;
	let obj={
		name,
		age,
    	//es5 sayName:function(){}
    	// sayName(){
        //     console.log(this.name) --按照这种形式写this依然指向调用者
        // },
		// sayName:()=>{
		// 	console.log(this)
		// }
		sayName(){
            //this-->obj
			return ()=>{
				console.log(this)
			}
		}
	}
	obj.sayName()();
----------------------------------------------------------
	let name='larry';
    let age=12;
    let sayName=()=>{
        console.log(this)
    }
        let obj={
            name,
            age,
            //es5 sayName:function(){}
            // sayName(){
            //     console.log(this.name)
            // },
            // sayName:()=>{
            // 	console.log(this)
            // }
            sayName(){
                return sayName
            }
        }
        // obj.sayName()()
    //箭头函数没有自己的this,内部this指向声明箭头函数时外部作用域中的this。
    obj.sayName()()

箭头函数

es5函数内部属性有this和arguments,箭头函数内arguments不再保存实参,如果想接受实参,可以使用rest参数

let test=(a,...b)=>{
		//console.log(this,arguments);
        console.log(a,b); //a--1 b--[2,3,4,5]
    }
    test(1,2,3,4,5)

扩展运算符

let arr = [1,2,3,4,5];
let [...a] = arr;
console.log(a);
// 用到左侧是聚合 用到右侧是展开
let obj = {
    name:'jemmy',
    age:27,
    gender:'male'
}
let {...b} = obj;
let temp = {...obj};
// 不影响原来的obj
delete temp.name;
console.log(b,temp,obj);

函数参数解构

function test1({name,age,...gender}){
    console.log(name,age,gender);
}
test1({name:'jemmy',age:21,gender:'male'});

function test2({name,age=21,...gender}){
    console.log(name,age,gender);
}
test2({name:'jemmy',gender:'male'});

// ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。通常情况下,定义了默
// 认值的参数, 应该是函数的尾参数,函数的length属性,将返回没有指定默认值的参数个数

function log1(a,b,c,d=1,e,f,g){}
console.log(log1.length);
function log2(h,i,j,k,l,m,n){}
console.log(log2.length);

 对象API拓展

Object.is()

Object.assign()

Object.getPrototypeOf()

Object.setPrototypeOf()

Object.keys() Object.values() Object.entries()

Object.fromEntries()

详细看下面代码

// Object.is()  判断两值是否相等或全等
// 特殊案例
console.log(+0 === -0);                 //true
console.log(Object.is(+0,-0));      //false
console.log(NaN === NaN);               //false
console.log(Object.is(NaN,NaN));    //true

// Object.assign() 
// 参数两个或三个 两个为复制对象 三个为合并对象 返回目标对象
// 复制是基本数据类型是值的复制,即深拷贝:引用数据类型是值的引用,即浅拷贝
// 复制对象
let o = {};
let obj = {
    name:'jemmy',
    age:21,
    gender:'male',
    address:{
        home:'1703'
    }
}
var res = Object.assign(o,obj);
console.log(res,obj);
res.name = 'JP';
res.address.home = '1702'
console.log(res,obj);

// 合并对象 
let obj1 = {
    name:'cammy',
    age:18,
}
let obj2 = {
    gender:'female'
}
let obj3 = {
    home:'1703'
}
var res1 = Object.assign(obj1,obj2,obj3);
console.log(res1,obj1,obj2,obj3);

// 访问原型对象 Object.getPrototypeOf() 参数:目标对象
console.log(obj.__proto__);
console.log(obj.constructor.prototype);
console.log(Object.getPrototypeOf(obj));

// 设置原型对象 Object.setPrototypeOf() 参数:目标对象 新原型
Object.setPrototypeOf(obj,obj2)
console.log(obj.__proto__);
console.log(obj.constructor.prototype);
console.log(Object.getPrototypeOf(obj));

// Object.keys() Object.values() Object.entries()
// 将属性名         属性值        属性名和属性值(二维数组)   转为数组
console.log(Object.keys(obj));
console.log(Object.values(obj));
console.log(Object.entries(obj));

// Object.fromEntries()  将二维数组变为对象
var res = Object.entries(obj);
console.log(Object.fromEntries(res));

 数组方法拓展

// 静态方法
// Array.from() 将类数组变为数组  Array.of()  创建数组

// 实例方法
// find()  参数回调函数 返回第一个满足条件的元素/undefined    不修改原数组
// let arr = [1,2,3,4,5,4,3,2,1];
// let res = arr.find((item,index,arr)=>{
//     return item > 3;
// })
// console.log(res,arr);

// findIndex()  参数回调函数   返回第一个满足条件的元素的下标/-1    不修改原数组
// let arr = [1,2,3,4,3,1,2];
// let res = arr.findIndex((item,index,arr)=>{
//     return item > 2;
// })
// console.log(res,arr);

// includes() 参数查找的数组元素 返回true/false 不修改原数组
// let arr = [1,2,3,4];
// let res = arr.includes(2);
// console.log(res,arr);

// fill() 用于填充数组 参数要填充的数组元素  修改原数组
// let arr = [1,2,3,2,1];
// let res = arr.fill(4);
// console.log(res,arr);

// keys() values() entries() 参数无  返回一个可迭代对象 不修改原数组
// let arr = [1,2,3,4,5];
// let keys = arr.keys();
// let values = arr.values();
// let entries = arr.entries();
// console.log(keys,values,entries,arr);

// flat 参数可写可不写 n/Infinity 返回展开后的数组  不修改数组
// let arr = [1,2,[3,4,[5,6,[7]]]];
// let res1 = arr.flat();
// console.log(res1);
// let res2 = arr.flat(Infinity);
// console.log(res2);
// console.log(arr);

// flatmap flat和map集合 参数回调函数  返回展开并被操作的结果 不修改原数组
let arr = [1,2,3,4,[5,6,7]];
let res = arr.flatMap((item)=>{
    if(typeof item === 'number'){
        return item*2;
    }else{
        // return item.map((item)=>{return item*2})
        return item.map(item=>item*2);
    }
})
console.log(res,arr);

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

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

相关文章

Java --- 云尚优选项目

目录 一、项目工程搭建 二、配置项目相关maven依赖 2.1、cjc.ssyx父工程依赖 2.2、common模块pom依赖 2.3、common-util模块pom依赖 2.4、service-util模块pom依赖 2.5、model模块pom依赖 2.6、service模块pom依赖 三、编写相关工具类 3.1、mybatis-plus分页查询配置…

SpringMVC学习笔记一

目录 一、SpringMVC概述二、入门案例1.导入相关依赖2.配置web.xml3.配置SpringMVC4.创建测试用的html页面5.编写Controller 三、请求映射规则RequestMapping1.RequestMapping注解标识的位置2.RequestMapping注解value属性3.RequestMapping注解的method属性4.RequestMapping注解…

Vector - CANoe - 测试报告配置

目录 一、测试报告格式设置 二、测试报告格式转换 1、Test Report Viewer format 转换为 PDF 格式

【ELK 企业级日志分析系统】

目录 一、ELK 概述1、ELK 简介1、可以添加的其它组件:2、filebeat 结合 logstash 带来好处: 2、为什么要使用 ELK3、完整日志系统基本特征4、ELK 的工作原理 二、实验操作1、ELK Elasticsearch 集群部署(在Node1、Node2节点上操作&#xff09…

【SpringBoot_Error】关于SpringBoot项目中经常出现yml/xml识别不到的问题

Problems 关于关于SpringBoot项目中经常出现yml/xml识别不到的问题 Solution 在pom.xml文件的<build></build>标签中添加如下代码&#xff1a; > <build><resources><!--检测mapperxml&#xff0c;本项目数据访问层的SQL xml文件放在Java包…

雷达人体存在感应器成品,雷达探测感知联动,空间智能化控制应用

随着科技的日新月异&#xff0c;人机交互的方式也不断推陈出新。在科技的不断发展与创新的驱动下&#xff0c;人们的生活正逐渐变得更加智能化和便捷化。 智能雷达人体存在感应器&#xff0c;凭借其呼吸探测技术&#xff0c;实现真正的人体存在探测&#xff0c;将智慧酒店、办…

C# 位1的个数

191 位1的个数 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 ‘1’ 的个数&#xff08;也被称为汉明重量&#xff09;。 提示&#xff1a; 请注意&#xff0c;在某些语言&#xff08;…

浅谈虚拟DOM、Diff算法、Key机制

您好&#xff0c;如果喜欢我的文章&#xff0c;可以关注我的公众号「量子前端」&#xff0c;将不定期关注推送前端好文~ 虚拟DOM 我们都知道虚拟DOM带来的好处&#xff0c;多次更新数据层的数据&#xff0c;最后异步处理只进行一次页面重绘&#xff0c;而这中间的奥秘就是虚拟…

论文 | 一分钟快速找到自己研究领域的核心期刊

进入知网官网 https://www.cnki.net/ 点击搜索框右边的&#xff1a;出版物检索 鼠标放到顶部的 出版来源导航 旁边的倒三角上 选择期刊导航&#xff1a; 点击核心期刊导航 找到自己感兴趣的领域 点进去就可以看到该期刊中发表的论文&#xff1a;

postgresql regular lock常规锁 烤的内嫩外焦,入口即化

​专栏内容&#xff1a; postgresql内核源码分析 手写数据库toadb 并发编程 个人主页&#xff1a;我的主页 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 介绍 常规锁&#xff0c;主要用于数据库对象的加锁&#xff0c…

学Python还是学JAVA,千万别听机构瞎吹!

机构真的为了割韭菜&#xff0c;无所不用其极&#xff0c;过份夸大Python语言的能力或者贬低JAVA。 导致大家要么跟风被割韭菜&#xff0c;学完也用不到。 导致这一主要原因&#xff1a; 1.你不懂行业内需求。 2.你缺乏认知清楚自己的发展规划路线的途径。3.对于编程的优缺点…

Pandas理论与实战(二)

本文章续接上篇文章 目录 1.数据抽取 1.1 抽取一行数据 1.2 抽取多行数据 1.3 抽取指定列数据 1.4 抽取指定行、列数据 1.5 按指定条件抽取数据 2、数据的增加、删除和修改 2.1 数据增加 2.2 修改数据 2.3 删除数据 1.数据抽取 数据分析过程中&#xff0c;并不是所有的数…

CentOS 6 手动将OpenSSH升级到9.3

前言 收到通知说服务器组件存在漏洞 服务器版本:CentOS-6.8-x86_64 目前SSH版本:OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 前置操作 为了避免升级过程中出现的意外导致服务器无法进行连接,建议对重要的内容先进行备份 创建快照 在主机服务商那里为主机创建快照,防止最糟…

Android Studio无法打开问题解决记录

目录 1 问题起因2 发现问题3 解决问题 1 问题起因 问题的起因是我为了运行一个Kotlin项目&#xff0c;但是报了一个错误&#xff1a; Kotlin报错The binary version of its metadata is 1.5.1, expected version is 1.1.16 然后我就上百度去搜了以下&#xff0c;一篇博客让禁用…

GEE:多元线性回归

作者&#xff1a;CSDN _养乐多_ 本文记录了在NDVI、EVI和LAI作为自变量&#xff0c;precipitation作为因变量的条件下&#xff0c;使用linearRegression函数进行线性回归分析的代码&#xff0c;代码在Google Earth Engine&#xff08;GEE&#xff09;平台上实现。具体而言&am…

AI大数据智能视频融合平台EasyCVR新增Ehome黑白名单配置

EasyCVR视频融合平台基于云边端智能协同架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;平台支持海量视频汇聚管理&#xff0c;可支持多协议接入&#xff0c;包括市场主流标准协议与厂家私有协议及SDK&#xff0c;如&#xff1a;国标GB28181、RTMP、RTSP/Onvi…

Linux 学习记录50(QT篇)

Linux 学习记录50(QT篇) 本文目录 Linux 学习记录50(QT篇)一、基于QT的TCP客户端连接1. 代码实现2. 自制的客户端/服务器 二、QT数据库SQL1. QT将数据库分为三个层次2. 实现数据库操作的相关方法 思维导图练习1.2.3.4. 一、基于QT的TCP客户端连接 所需头文件 <QTcpSocket&g…

3G理论概述

文章目录 UMTS&#xff08;通用移动通信系统&#xff0c;Universal Mobile Telecommunications System&#xff09;UTRAN&#xff08;UMTS陆地无线接入网&#xff0c;UMTS Terrestrial Radio Access Network&#xff09;RNC&#xff08;无线网络控制器&#xff0c;Radio Networ…

music21 层级解析(了解次结构方可将任意曲谱与mid互相转换)

这段代码创建了一个音乐乐谱并将其保存为 MIDI 文件&#xff0c;其中包含一个乐器和多个小节。每个小节中包含四个音符或和弦&#xff0c;然后将小节添加到乐谱中。最后&#xff0c;将乐谱写入 MIDI 文件。 首先&#xff0c;通过导入 music21 库来使用它的功能。 import music2…