【ES6新特性】介绍ES6新特性的内容,如var,Let,Const声明变量的区别,解构赋值的概念,字符串的扩展,数组的扩展,以及对象的扩展。

news2024/12/24 20:53:44

目录

1.var,let,const的区别

1.1 var

1.2 let

1.3 const

1.4 区别总结

2.解构赋值

2.1 基本解构化赋值

2.2 数组取值

2.3 对象解构化赋值和取值

2.4 Math对象的解构化使用

3. 字符串扩展

3.1 新增字符串遍历方式

3.2 模版字符串

3.3 字符串的函数扩展

4.数组扩展

4.1 新增扩展运算符spread ( ... )

4.2 新增数组方法

(1)Array.from()

(2)Array.of()

5.对象的扩展

5.1 属性和方法的简洁表示

5.2 属性名表达式

5.3 扩展运算符(...)

5.4 箭头函数


1.var,let,const的区别

1.1 var

语法格式:  var 变量名;

  • 该关键字定义作用域为全局。(全局变量)
  • var 声明的变量会被提升至作用域的顶部。你可以在变量声明之前使用它,此时变量的值为 undefined。虽然变量会被提升,但变量的赋值不会被提升。因此,在变量声明之前试图访问该变量时,其值仍是 undefined。(变量提升)
  • 可以多次使用 var 声明同一个变量名,而不会引发语法错误。(重复声明)

1.2 let

语法格式:  let 变量名;

  • 只在最近的 { } 内有效。(块级作用域)
  •  let不存在变量提升,var声明的变量在浏览器解析js代码的时候就会创建,但是let在js代码执行的时候才创建。(不存在变量提升)
  • 同级作用域中不允许重复声明变量!出现同名变量会报错!(不允许重复声明)
  • 变量在没有被声明之前不允许使用。(未声明不可使用)

1.3 const

声明一个只读的常量。一旦声明,常量的值就不能改变。语法格式:  const 变量名=常量值;

其特点在let特点的基础上多一个不可变性。

  • 声明的时候必须初始化,并且值不可以改变。(不可变性)
  • 只在 { } 中有效。(块级作用域)
  • 不可向上提升,不可重复声明(所有的变量不可重复)。(不存在变量提升,不允许重复声明
  • 变量在没有被声明之前不允许使用。(未声明不可使用)

注:虽然 const 变量本身不可重新赋值,但如果是对象或数组的话,其内部的属性是可以修改的。

1.4 区别总结

  • var:具有函数作用域,变量提升,可以重复声明。
  • let:具有块级作用域,变量不可提升,不能重复声明,可以重新赋值。
  • const:具有块级作用域,变量不可提升,不能重复声明,不能重新赋值。

2.解构赋值

2.1 基本解构化赋值

给变量a,b赋值。

let[a,b]=[12,14];
        console.log(a);
        console.log(b);

2.2 数组取值

在数组中取值

let arr=["嘿嘿","哈哈","嘻嘻"];
        let[s1,s2]=arr;
        console.log(s1);//嘿嘿
        console.log(s2);//哈哈

2.3 对象解构化赋值和取值

  • 对象解构化赋值
//对象解构化赋值
        var obj={
            name:"张三",
            age:20,
            test:function(){
              console.log("我是对象中定义的函数")  
            }
        }
  • 对象解构化取值
           //对象解构化赋值
            var obj={
                name:"张三",
                age:20,
                test:function(){
                  console.log("我是对象中定义的函数")  
                }
            }
            //传统方式取值
             let name=obj.name;
             let age=obj.age;
            //解构化取值
            let{name,age}=obj;
            console.log(name+"---"+age);
            //传统方式,使用函数
            obj.test();
            //解构化方式,使用函数
            //取出对象obj里面为名为test的函数。
            let{test}=obj;
            test();

2.4 Math对象的解构化使用

Math对象的解构使用

        //Math对象的使用
        console.log(Math.ceil(3.14));//向上取整  4
        console.log(Math.floor(3.14));//向下取整 3
        console.log(Math.round(6.8));// 四舍五入 7
        // 使用结构化后,使用更加简洁
        let{ceil,floor,round}=Math;
        console.log(ceil(9.21));
        let{log}=console;
        log("aaaa");

注意:如果要将一个已经声明的变量用于解构赋值,必须非常小心

3. 字符串扩展

3.1 新增字符串遍历方式

格式:

  • for (let 变量名 of 字符串){

                    //循环代码

                }

注意: :let后定义的变量值为每次遍历的字符串的字符的值。

  • 还能遍历其他的可迭代(iterable)对象,如数组 (Array),字符串 (String),映射 (Map),集合 (Set)类数组对象等等。

3.2 模版字符串

let url = "www.zyp.com";
2let a2 = "<a href='" + url + "'></a>"; // 字符串拼接
3let a3 = `<a href='${url}'></a>`; // 使用模板字符串
4
5console.log(a2); // 输出: <a href='www.zyp.com'></a>
6console.log(a3); // 输出: <a href='www.zyp.com'></a>

3.3 字符串的函数扩展

  1. includes():返回布尔值,表示是否找到了参数字符串。
  2. startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
  3.  endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。


    注:这三个方法都支持第二个参数,表示开始搜索的位置

  4. repeat():返回一个新字符串,表示将原字符串重复 n 次。

  5. padStart()和padEnd():字符串补全长度的功能。如果某个字符串不够指定 长度,会在头部或尾部补全。 padStart() 用于头部补全, padEnd() 用于尾 部补全。

  6. trimStart()和trimEnd():它们的 行为与 trim() 一致, trimStart() 消除字符串头部的空格, trimEnd() 消除尾部 的空格。它们返回的都是新字符串,不会修改原始字符串。

  7. at() :接受一个整数作为参数,返回参数指定位置的字符,支持负 索引(即倒数的位置)。


    注意:如果参数位置超出了字符串范围, at() 返回 undefined

4.数组扩展

4.1 新增扩展运算符spread ( ... )

(1)将一个数组转为用逗号分隔的参数序列。

(2)替代函数的 apply 方法:由于扩展运算符可以展开数组,所以不再需要 apply 方法,将数组转 为函数的参数了。

(3)合并数组:

4.2 新增数组方法

(1)Array.from()

方法用于将类数组转为真正的数组,常见的类数组有三类:

  1. arguments
  2. 元素集合
  3. 类似数组的对象

①arguments:是一个类数组对象,它包含了传递给函数的所有实参。

②元素集合

③类似数组的对象(了解即可)

(2)Array.of()

Array.of() 方法用于将一组值,转换为数组。

5.对象的扩展

5.1 属性和方法的简洁表示

ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。

5.2 属性名表达式

ES6 允许字面量定义对象时,用表达式作为对象的属性名,即把表 达式放在方括号内。

5.3 扩展运算符(...)

ES2018 将这个运算符引入了对象。

5.4 箭头函数

ES6 允许使用“箭头”( => )定义函数。可以优化函数的使用,但不是替换以前的函数声明方案使用,一般在函数作为参数传递的时候使用箭头。

 箭头函数式使用规则

注意:对于普通函数来说,内部的 this 指向函数运行时所在的对象,但是箭头函数没有自己的 this 对象,内部的 this 是引用外层的 this对象。

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

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

相关文章

数据库学习笔记

一、数据库相关概念 主流的关系型数据库管理系统&#xff08;DBMS&#xff09; 关系型数据库以 表格 的形式存在&#xff0c;以 行和列 的形式存取数据&#xff0c;关系型数据库这一系列的行和列被称为表&#xff0c;无数张表组成了 数据库 &#xff0c;常见的关系型数据库有 …

绿色积分引领:我店平台的可持续消费革命

在当今数字化浪潮的推动下&#xff0c;“我店”凭借其创新的环保积分系统&#xff0c;在消费市场中脱颖而出&#xff0c;逐渐改变着市场的结构。本文将详细分析该平台的竞争优势、市场策略以及它如何利用创新手段塑造未来的消费趋势。 一、环保积分&#xff1a;消费体验革新的关…

在ElementUI项目中集成iconfont图标库

在前端项目开发中经常会遇到使用的组件库提供的ICON图标不够用的情况。最常见的解决方案无非就是把设计图的图标切图引入到项目中。还有就是使用svg图标&#xff0c;封装一个渲染组件在项目里面直接引入这个组件。 本文将介绍另一种方法&#xff0c;即集成iconfont图标库的图标…

redis面试(二十二)读锁释放

假设现在已经有各种锁的重入什么的&#xff0c;那如何释放锁&#xff1f; 读锁读锁 假如说&#xff0c;同一个线程多次加读锁&#xff0c;或者不同的线程加了多个读锁 当前的锁结构长这样 anyLock: { “mode”: “read”, “UUID_01:threadId_01”: 2, “UUID_02:threadId_02…

CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(二)

CRUD老生常谈&#xff0c;但是我搜索了一圈&#xff0c;发觉几乎是着重在后端&#xff0c;也就是API部分&#xff01; 无外乎2个思路 1.归总的接口&#xff0c;比如一个接口&#xff0c;实现不同表的CRUD 2.基于各自的表&#xff0c;使用代码生成器实现CRUD 个人来说是推荐2&am…

css设置input单选radio多选checkbox样式

最近接手一个古老的项目&#xff0c;要修改里边的主题颜色&#xff0c;使用css的var方法一路轻松&#xff0c;最后在input的单选radio和多选checkbox被踩了刹车&#xff0c;也是有几年没做这种原始的项目手生了&#xff0c;最后经过几番折腾后&#xff0c;通过input的伪元素将其…

FPGA开发——使用verilog实现异步FIFO

一、FIFO 介绍 1、FIFO的分类 FIFO &#xff08; First In First Out&#xff09;先进先出存储器。根据接入的时钟信号&#xff0c;可以分为同步 FIFO 和异步 FIFO 。 FIFO 底层是基于双口 RAM &#xff0c;同步 FIFO 的读写时钟一致&#xff0c;异步 FIFO 读时钟和…

一看就会的Mysql 集群技术

目录 一、Mysql介绍 1.1什么是MySQL 1.2MySQL的优势 1.3MySQL的常用语句 二、MySQL源码安装 三、实验练习 3.1MySQL部署 实验环境 实验步骤 1.创建用户&#xff0c;数据目录&#xff0c;更改权限 2.修改文件 3.初始化&#xff0c;会生成一个密码&#xff0c;将其保…

没有人会窃取你的想法,关键在于执行

没有人会窃取你的想法&#xff0c;关键在于执行 引言 当我第一次读到 Pieter Levels 的创业故事时&#xff0c;我感到无比激动和鼓舞。那种看到未来无限可能的感觉&#xff0c;让我充满了希望与奋斗的力量。他的经历不仅让我明白了创意的价值&#xff0c;更重要的是让我深刻感…

内网穿透的几种方法

内网穿透的几种方法 随着网络技术和应用的不断发展&#xff0c;越来越多的企业和个人需要实现内外网之间的数据交互和服务访问。然而&#xff0c;由于防火墙、NAT&#xff08;网络地址转换&#xff09;等安全措施的存在&#xff0c;直接从外部访问内部网络中的服务器或设备变得…

Linux基础软件-dns(一)

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux进阶部分又分了很多小的部分,我们刚讲完了Linux日常运维。讲的那些东西都算是系统自带的&#xff0c;但是Linux作为一个…

Nvidia驱动莫名其妙不好使了?nvidia-smi报错?如何解决?已解决!!

文章目录 一、报错提示二、解决方案2.1 原因1的解决办法2.2 原因2的解决方案 一、报错提示 Ubuntu20.04出现Failed to initialize NVML: Driver/library version mismatch问题NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver. 二、解决方案 …

深入探究linux文件IO

一、原子操作和竞争条件 所有系统调用都是以原子操作方式执行的。之所以这么说&#xff0c;是指内核保证了某系统调用中的所有步骤会作为独立操作而一次性加以执行&#xff0c;其间不会为其他进程或线程所中断。 以独占方式创建一个文件 结合 O_CREAT 和 O_EXCL 标志来一次性…

AI学习记录 - 怎么理解 torch 的 torch.nn.BatchNorm2d

画图不易&#xff0c;有用就点个赞 这里创建了一个随机张量&#xff0c;形状为 (4, 3, 4, 4)&#xff0c;分别对应 形状为 (batch_size, num_channels, height, width) batch_size&#xff1a;批次 num_channels&#xff1a; 通道&#xff08;什么是通道看上一章节&#xff0…

串口和RS485通信

一、 定义串口收发数据结构体 /*COM Received Data Structure*/ typedef struct {uint8_t ubr_EndFlag; //Received data end flag uint8_t ubr_buffer[300]; //Received data bufferuint8_t ubr_bufferTemp[300]; //Received data bu…

K-medoids算法原理及Python实践

一、原理 K-medoids算法是一种聚类算法&#xff0c;它的原理与K-Means算法相似&#xff0c;但关键区别在于它使用数据集中的实际点&#xff08;称为medoids&#xff09;作为簇的中心点&#xff0c;而不是像K-Means那样使用簇内所有点的平均值。以下是K-medoids算法的主要原理&…

如何在算家云搭建模型Stable-Fast-3D(3D模型生成)

一、模型介绍 Stable-Fast-3D 具有 UV 展开和照明解缠的稳定快速 3D 网格重建&#xff0c;它是一种从单个图像进行快速前馈 3D 网格重建的最先进的开源模型。 二、模型搭建流程 基础环境最低要求说明&#xff1a; 环境名称版本信息1Ubuntu22.04.4 LTSCudaV12.1.105Python3.…

【项目日记】高并发内存池 ---项目介绍及组件定长池的实现

余生还长&#xff0c;你别慌&#xff0c;也别回头&#xff0c;别念旧. --- 余华 --- 1 高并发内存池简介 高并发内存池项目是实现一个高并发的内存池&#xff0c;他的原型是google的一个开源项目tcmalloc&#xff0c;tcmalloc全称Thread-Caching Malloc&#xff0c;即线程缓存…

快速排序与其例题

一、快速排序 1、简单介绍&#xff1a;快速排序&#xff08;Quick Sort&#xff09;是一种高效的排序算法&#xff0c;由计算机科学家Tony Hoare在1960年提出。它是基于分治法的排序算法&#xff0c;其基本思想和步骤如下&#xff1a; 基本概念 快速排序的核心思想是将待排序…

一种商业模式既解决引流又解决复购 你想了解一下嘛?

欢迎各位&#xff0c;我是你们的电商策略顾问&#xff0c;吴军。今天&#xff0c;我将向大家介绍一种新颖的商业模式——循环购物模式。这种模式有何独特之处&#xff1f;商家真的在进行慷慨的赠金活动吗&#xff1f;消费者在购物的同时还能获得额外收益&#xff1f;甚至可以将…