ES6-数组、对象、函数扩展、Symbol

news2024/11/27 1:27:59

01- let声明变量

  1. 块级作用域
    var是全局变量,let只作用于块级作用域内
    每一次都是让一个新的i的值没有被释放掉
  2. 不允许重复声明
  3. 变量不提升(声明没有提前)
  4. 暂存性死区
  5. 不与顶层对象挂钩

02-const常量

  1. 常量
  2. 必须初始化,初始化以后就不能修改
  3. 块级
  4. 声明不提升
    暂存性死区
 		const myname="oejid";
        function test(){
            console.log(myname);
            const myname="wpodk";
        }
        test();
        // 地址不能改变
        const myobj ={
            name:"oijoe",
            age:19,
        }
        // myobj="koo";报错
        myobj.name="oiqkdk";//对象的地址不变,对象里面的属性可以改变(栈引用不可变,堆内容可改)

fresze冻结的意思,用于禁止改变myobj里面的内容
        const myobj =Object.freeze({
                    name:"oijoe",
                    age:19,
                });
  1. 不与顶层对象挂钩

03-变量解构赋值

 1.交换数据
        let x=1;
        let y=2;
        [y,x]=[x,y];
 2.获取数据
        let arr1=[1,2,3]
        let [a,b,c]=arr;//a=1,b=2,c=3
        let [,,d]=arr;//z=3
        let arr2=[1,[2,3,4],5,6]
        let [,[e],]=arr;//e=2
        /* let[x=1]=[100];
        console.log(x);//x=100 */
        let obj={
            name:"kerwin",
            age:100,
        }
        //let {name,age}=obj;//这里解构复制左侧的变量名需和要解构的对象属性名一致
        let {age}=obj;
        console.log(age);//age=100
3.外面里面重名情况
        /* let code="AAA";
        let res={
            code:200,
            data:"111"
        }
        let {data,code:co,err="不写返回undefined,否则返回写的内容"}=res;// :重新命名
        console.log(data,co);//111  200 */
        let res={
            code:200,
            data:{
                list:["a","b","c"]
            }
        }
        let {data:{list:[x1,y1,z1]},code:co,err="不写返回undefined,否则返回写的内容"}=res;// :重新命名
        console.log(data,co,err);//111  200
4.常用传参方式
        function getData(){
            let res={
                code:200,
                data:{
                    list:["a","b","c"]
                }   
            }
            test(res);
        }
        function test( {code,data:{list}} ){
            console.log(code,list);
        }
        getData(); 
    </script>

04-字符串模板

 1. 解决换行后内容不连接问题:在换行后面加一个\
        let name="tiechui";
        //1.1在换行后面加一个\(基本不用)
        // let oli="<li>\
        //     <b>"+name+"</b>\
        //     </li>"
  2.原本的""换成``
        let oli=`<li>
             <b>${name}</b>
            </li>`;
  3. 数组中自带映射方法map();
	 ${}的妙用
        function test(){
            return "函数返回结果"
        }
        let arr=["wwpo","owie","oeo"];
        let newlist=arr.map(function(item,index){
            return `<li class="${index===0?'active':''}">
             <b>${item}</b>
             ${test()}
            </li>`
        });
        let oul=document.querySelector("ul");
        // 数组上到页面中会自动转换成字符串,用逗号隔开,用join("")空字符串隔开就没有了
        oul.innerHTML=newlist.join("")

05-字符串扩展

 		let myname="kerwin";1.includes函数:判断字符串中是否有指定字符
        console.log(myname.includes("k"));//true
        console.log(myname.includes("en"));//false
        //从指定索引位置开始找,包含该索引
        console.log(myname.includes("e",2));//false
2.startsWith、endsWith函数:判断一个字符串是否以xx开头、结尾
    console.log(myname.startsWith("ker"));//true
    console.log(myname.endsWith("win"));//true
    // 从指定索引位置往前查找,不包括该索引位置
    console.log(myname.endsWith("r",3));//true
3.repeat函数:返回一个新的字符串,表示将原字符重复n次
        console.log(myname.repeat(2.8));//重复两次
        console.log(myname.repeat("4"));//重复4次,自动转换类型

06-数值扩展

0x十六进制、0b二进制、0o八进制
isFinite判断是不是一个有效值
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

07-数组扩展

1…展开

arr1.concat(arr2);连接两个数组

		 1.破掉中括号,复制数组
        let arr=[1,2,3];
        // //1. let arr2=arr.concat();
        // let arr2=[...arr];//只能得到表层数据,如果里面嵌套更复杂的数据是拿不到的
        //2. arr2.pop();
        // console.log(arr,arr2);
         2.快速合并方案
        let arr2=[4,5,6];
        console.log([...arr,...arr2]);//连接arr,arr2两个数组
         3.获取
        let myarr=[1,2,3,4,5,6,7,8];
        let [a,b,...c]=myarr;//这里...只能用到最后一个身上
        console.log(c);//3,4,5,6,7,8

2.Array.form强行转化成一个数组

arguements不是一个真正的数组,不能使用map();过滤filter();等数组方法

function test(){
            console.log(Array.from(arguments));
        }
        test(1,2,3,4);
        let olis=document.querySelectorAll("li")//nodelist没有map,filter,pop等方法
        Array.from(olis).map(function(){
        })

3.Array.of了解)

 // let arr1=Array(3);let arr1= new Array(3)//创建一个有三个值的空数组
        let arr1=Array(1,2,3)
        // let arr2=Array.of(3)//创建一个数组[3]
        let arr2=Array.of(1,2,3)

4.find findIndex()

let arr=[11,12,23,41,52,36,37]
// let res =arr.find(function(item){
//     return item>13
// })
// console.log(res);//得到大于13的数的值
let res =arr.findIndex(function(item){
    return item>13
})
console.log(res);//得到大于13的数的索引

findLast findIndexLast()与find findIndex()不同的是这两个方法在数组中是从后往前找

5.fill();(了解)

let arr1=new Array(3).fill("lweoe");快速填充数组
let arr1=new Array(3).fill("lweoe",1,2);快速填充数组第一个值

6. flat() 扁平化处理,二维变一维 flatMap()

  let arr=[1,2,3[4,5,6]]; 
  let arr1=arr.flat();//[1,2,3,4,5,6]

在这里插入图片描述

08-对象扩展

1.对象简写

   let name="modulA";
    let obj={
        name,//name:name
        test1(){},//方法简写
        test2(){},
    }

2、对象属性 表达式

		let name="a";
		let obj={
   	 		name:"kerwin",
		}
		console.log(obj);//{name:"kerwin"}
 把外面的变量当做内部属性,用[]
    	let name="a";
   		 	let obj={
        		[name]:"kerwin", //[name+"bc"]:"kerwin",
    		}
    	console.log(obj);//{a:"kerwin"}//{abc:"kerwin"}
     	let name="modulA";
    	let obj={
       	 	name,//name:name
        	[name+"test1"](){},//方法简写
        	[name+"test2"](){},
    	}

3. 扩展运算符

	let obj={
    	name:"kerwin"
	}
	 let obj1={
    ...obj
	}
	obj1.name="tio";//obj1里的改变了obj里面的也会改变 */
	// 合并对象,如果属性同名,后面的会覆盖前面的
	let obj2={
    	age:100
	}
	console.log({...obj,...obj2});

4.object.assign后面的对象往第一个对象填充,属性同名的后面覆盖前面

           obj={}
            let obj1={
                name:"kerwin"
            }
            let obj2={
                age:100
            }
            let obj3={
                name:"tiechui"
            }
            console.log(Object.assign(obj,obj1,obj2,obj3));
            //{obj={name:"tiechui",age:100}}
            //(了解)Object.is判断是否相等===
//console.log(Object.is(5,5));//true
//console.log(Object.is(5,"5"));//false
//console.log(Object.is({},{}));//都不会判断两个对象是否相等
//Object.is(NaN,NaN)//可以判断nan是否相等,===不能

09-函数的扩展

1.参数默认值

        function ajax(url,method="get",async=true){
            console.log(url,method,async);
        }
        ajax("/aaa");//{"/aaa","get",true}传的数据不够,设置默认值的会返回默认值
        // 只有当与之匹配的实参严格等于undefined时成立

2.rest参数 剩余参数

       function test(...data){
           console.log(date);//[1,2,3]
       }
       test(1,2,3)

3.箭头函数:写法简介

        /* let test=()=>{
            return "111"
        } */
 1.如果里面没有别的执行代码,只有return可以更简化:
        let test=()=> "111"
 2.如果返回的是一个对象需要用括号包起来(防止浏览器解析成作用域)
        let test=()=>({
            name:"kerwin",
            age:100
        })
 3.如果只有一个参数 可以省略()
        let arr=["aa","bb","cc"];
        let newarr=arr.map(item=>`<li>${item}</li>`);
        let newarr1=arr.map((item,index)=>`<li>${item}</li>`);
 4.无法访问arguements,无法new
        let test=()=>{
            // console.log(arguments);
        }
        new test();
        
 5.箭头没有thisthis指向父作用域
        let osearch=document.querySelector("#search");
        //setTimeout指向的是window
        osearch.onput=function(){
            // console.log(this);
            let _this=this;//否则指向的是window,输出结果是:发送undefined到后端获取数据
            setTimeout(function(){
                console.log(_this.value);
                console.log(`发送${this.value}到后端获取数据`);
            },1000);
        }
        osearch.onput=function(){
            console.log(this);
            setTimeout(()=>{//箭头函数模糊获取,指向父元素osearch
                console.log(this.value);
                console.log(`发送${this.value}到后端获取数据`);
            },1000);
        }

10-新增数据类型:Symbol

0.独一无二的值
        let s1=Symbol();
        let s2=Symbol();
        console.log(s1==s2);//false
        console.log(s1===s2);//false
1.不能进行运算
2.显示调用toString()
        console.log(s1.toString()+"aaa");
        // 3. 隐式转换boolean
        if(s1){
            console.log("true执行");
        }
4.obj.name=""是修改对象里面属性值的意思,也可以拿到里面的值
        //而obj[name]是增加属性名和值的意思
        let age=Symbol();
        let obj={
            name:"kerwin",
            [age]:100
        }
        console.log(obj.name);//"kerwin"
        let name=Symbol();
        // obj.name="";//错误name是symbol值不能用来修改字符串
        obj[name]="ooo"
        console.log(obj);//结果:obj={ name:"kerwin",[age]:100,[Symbol()]:"ooo"}
 5.可以进行传参,区分对象属性 let age=Symbol("age");
 6. for in遍历,只能遍历字符串等普通属性,Symbol()遍历不出
        for(let i in obj){
            console.log(i);
        }
        // 遍历Symbol();
        console.log(Object.getOwnPropertySymbols(obj));
        // 两者都可遍历:
        Reflect.ownKeys(obj).forEach(item=>{
            console.log(item,obj[item]);
        })
 7.作为常量
        // 用Symbol时,传参只能用VIDEO,AUDIO,IMAGE三个属性,传数字不行
        // const VIDEO=Symbol();
        // const AUDIO=Symbol();
        // const IMAGE=Symbol();
        const VIDEO=1;
        const AUDIO=2;
        const IMAGE=3;
        function play(type){
            switch(type){
                case VIDEO:
                    console.log("视频播放");
                    break;
                case AUDIO:
                    console.log("音频播放");
                    break;
                case IMAGE:
                    console.log("图片播放");
                    break;
            }
        }
        play(1);     

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

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

相关文章

Linux addr2line介绍

打开linux调试选项 嵌入式 linux 经常要编译 linux 内核&#xff0c;默认情况下编译出的内核镜像是不带调试信息的&#xff0c;这样&#xff0c;当内核 crash 打印 PC 指针和堆栈信息时&#xff0c;我们需要反汇编来确认出错位置&#xff0c;不直观。 如果内核开启了调试选项&…

HarmonyOS实战开发-如何实现跨应用数据共享实例。

介绍 本示例实现了一个跨应用数据共享实例&#xff0c;分为联系人&#xff08;数据提供方&#xff09;和联系人助手&#xff08;数据使用方&#xff09;两部分&#xff1a;联系人支持联系人数据的增、删、改、查等功能&#xff1b;联系人助手支持同步联系人数据&#xff0c;当…

动态支付策略:Go 语言中策略模式的妙用

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等&#xff0c;您的关注将是我的更新动力&#xff01; 在现代软件架构中&#xff0c;支付功能是不可或缺的一环。无论是在线购物还是虚拟服务&#xff0c;支付策略的选择直接影响用户体…

GitHub教程:最新如何从GitHub上下载文件(下载单个文件或者下载整个项目文件)之详细步骤讲解(图文教程)

&#x1f42f; GitHub教程&#xff1a;最新如何从GitHub上下载文件(下载单个文件或者下载整个项目文件)之详细步骤讲解(图文教程) &#x1f4c1; 文章目录 &#x1f42f; GitHub教程&#xff1a;最新如何从GitHub上下载文件(下载单个文件或者下载整个项目文件)之详细步骤讲解(图…

Android Framework学习笔记(2)----系统启动

Android系统的启动流程 启动过程中&#xff0c;用户可控部分是framework的init流程。init是系统中的第一个进程&#xff0c;其它进程都是它的子进程。 启动逻辑源码参照&#xff1a;system/core/init/main.cpp 关键调用顺序&#xff1a;main->FirstStageMain->SetupSel…

AI“复活”:慰藉心灵还是触碰禁忌?一文看懂技术与伦理的较量|TodayAI

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;其应用领域也越来越广泛&#xff0c;不仅仅局限于数据分析、机器人自动化等传统领域&#xff0c;更是延伸到了一些人们曾经认为只存在于科幻小说中的领域。近年来&#xff0c;使用AI技术“复活”逝者的概念&a…

免费云服务器汇总,最长永久免费使用

随着云计算技术的快速发展&#xff0c;越来越多的企业和个人开始将业务迁移到云端。云服务器作为云计算的重要组成部分&#xff0c;以其灵活、高效、可扩展等特点受到广泛关注。然而&#xff0c;许多人在初次接触云服务器时&#xff0c;可能会对高昂的价格望而却步。为了帮助大…

替换空格(替换特定字符)

&#x1f600;前言 在字符串处理中&#xff0c;经常会遇到需要替换特定字符的情况。本文将介绍一道经典的字符串替换问题&#xff1a;将字符串中的空格替换成 “%20”。我们将探讨一种高效的解决方法&#xff0c;通过倒序遍历字符串来实现原地替换&#xff0c;避免额外空间的开…

电网的正序参数和等值电路(三)

本篇为本科课程《电力系统稳态分析》的笔记。 本篇这一章的第三篇笔记。上一篇传送门。 标幺制和电网等值电路 标幺制 标幺值的定义 标幺值是一种相对值&#xff0c;是某种物理量的有名值和所选定的与有名值同单位的基准值之比&#xff0c;即&#xff1a; 标幺值 有名值…

第四百四十八回

文章目录 1. 知识回顾2. 使用方法3. 代码与功能3.1 示例代码3.2 功能说明 4. 内容总结 我们在上一章回中介绍了"overlay_tooltip简介"相关的内容&#xff0c;本章回中将介绍OverlayTooltip用法.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 知识回顾 我们在上…

Mysql底层原理五:如何设计、用好索引

1.索引的代价 空间上的代价 时间上的代价 每次对表中的数据进⾏增、删、改操作时&#xff0c;都需要去修改各个B树索引。⽽且我们讲过&#xff0c;B树每层节点都是按照索引列的值从⼩到⼤的顺序排序⽽组成了双 向链表。不论是叶⼦节点中的记录&#xff0c;还是内节点中的记录&a…

Win10下VirtualBox启动任何一个虚拟机马上出现蓝屏死机(终止代码:SYSTEM_SERVICE_EXCEPTION)

环境: Win10专业版 VirtualBox5.1.28 问题描述: Win10下VirtualBox启动任何一个虚拟机马上出现蓝屏死机(终止代码:SYSTEM_SERVICE_EXCEPTION),之前都一直没问题 检查下面功能是否开启 已启用 Credential Guard/Device Guard。 已启用 Windows 沙箱 已启用虚拟机平台…

二维码门楼牌管理应用平台:实现精细化、智能化场所管理

文章目录 前言一、二维码门楼牌管理应用平台的构建二、场所任务的精细化管理三、消防检查与整改的智能化管理四、二手交易登记的便捷化管理五、未来展望 前言 随着城市管理的日益精细化&#xff0c;二维码门楼牌管理应用平台应运而生。通过这一平台&#xff0c;场所负责人可以…

2024-04-08 NO.6 Quest3 自定义交互事件

文章目录 1 交互事件——更改 Cube 颜色2 交互事件——创建 Cube2.1 非代码方式2.2 代码方式 ​ 在开始操作前&#xff0c;我们导入上次操作的场景&#xff0c;相关介绍在 《2024-04-08 NO.5 Quest3 手势追踪进行 UI 交互-CSDN博客》 文章中。 1 交互事件——更改 Cube 颜色 …

知识管理系统|基于Springboot和vue的知识管理系统设计与实现(源码+数据库+文档)

知识管理 目录 基于Springboot和vue的知识管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台&#xff1a; 5.2.2 文章信息 5.3.1 论坛交流 2、后台 用户管理 5.1.2 文章分类 5.2.1 资料分类 四、数据库设计 五、核心代码 六、论文参考 七、最…

【游戏逆向】游戏全屏捡物的实现

0x0前言&#xff1a; 在角色对战类中&#xff0c;拾取怪物掉落的装备是一项必备的工作&#xff0c;由于装备位置掉落的不确定性&#xff0c;玩家想要拾取离角色距离较远的装备需要一定的时间&#xff0c;这一段时间往往会影响游戏的评分或是玩家的心态&#xff0c;基于此&…

CasaOS玩客云部署AList+Aria2结合内网穿透实现公网离线下载文件至网盘

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-cdH8fnSF05FmvunX {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

第四十七周:文献阅读+AGCN+Wavenet network

目录 摘要 Abstract 文献阅读&#xff1a;结合自适应图卷积和CNN-LSTM的多站点水质预测模型 现有问题 提出方法 方法论 Adaptive graph convolution network&#xff08;自适应图卷积网络&#xff09; WaveNet network&#xff08;WaveNet网络&#xff09; CNN-LSTM混…

一文搞懂从爬楼梯到最小花费(力扣70,746)

文章目录 题目前知动态规划简介动态规划模版 爬楼梯一、思路二、解题方法三、Code 使用最小花费爬楼梯一、思路二、解题方法三、Code 总结 在计算机科学中&#xff0c;动态规划是一种强大的算法范例&#xff0c;用于解决多种优化问题。本文将介绍动态规划的核心思想&#xff0c…

HarmonyOS 应用开发之@Concurrent装饰器:@Sendable装饰器:声明并校验Sendable类

简介 在使用 TaskPool 时&#xff0c;执行的并发函数若需要传输类对象且使用该类的内部方法&#xff0c;该类需要使用此装饰器修饰&#xff0c;否则无法使用此对象内的方法。SendableClass有以下两种行为&#xff1a; 支持SendableClass序列化。对象分配在各自的虚拟机内存空间…