【ES6】基础特性总结

news2025/3/13 11:53:21

概述

仅个人使用,复习ES6的笔记,比较粗糙,仅适用于浏览器端。

数据类型

ES6(ECMAScript 2015)引入了一些新的数据类型和对现有数据类型的扩展。以下是ES6中数据类型的一个简要总结表格:

数据类型描述
Number包括整数和浮点数,新增了Number.isInteger()等方法。
String字符串类型,新增了模板字符串、字符串遍历器等特性。
Boolean布尔类型,没有新增。
Undefined表示变量已声明但未初始化,没有新增。
Null只有一个值null,表示空值,没有新增。
Symbol新增的原始数据类型,用于创建唯一的不可变标识符。
Object包括普通对象和特殊对象(如Array、Function等),新增了Object.assign()等方法。
Array数组对象,新增了Array.from()Array.of()等静态方法。
Function函数对象,没有新增。
Map存储键值对的集合,键和值可以是任意值,支持迭代。
Set存储唯一值的集合,支持迭代。
WeakMap存储键值对的集合,键必须是对象,且垃圾回收机制可以忽略其值。
WeakSet存储唯一对象的集合,垃圾回收机制可以忽略其值。
Promise用于异步计算的对象,允许你为异步操作写同步代码。
Generator函数*(星号)表示的函数,可以创建迭代器。
ArrayBuffer二进制数据缓冲区,用于操作二进制数据。
TypedArray基于ArrayBuffer的视图,包括Int8ArrayUint8Array等类型。

这个表格简要概述了ES6中的数据类型及其特点。ES6的引入极大地丰富了JavaScript的数据类型和功能,使得编程更加灵活和强大。

变量和常量申明

console.log(x);  //ReferenceError: Cannot access 'x' before initialization
console.log(PI); 

let x = 10;      // 申明变量
const PI = 3.14; // 申明常量
  • letconst都不存在变量提升,也不会像var申明的变量变成全局变量或挂载到顶层对象window上。

解构赋值

变量解构赋值

let x = 10;
let y = 10;
let z = 10;

可以使用类似数组的形式,批量申明和赋值:

let [x,y,z] = [10,20,30]; 
console.log(x,y,z);  // 10 20 30

对象的解构赋值

let {name,sex,age} = {age:12,sex:"man", name:"张三"};

console.log(sex)
  • 和数组形式一样,let {} = {}并不是创建了一个对象,而是以对象的形式批量声明变量;
  • let {name,sex,age},定义了变量名称,{age:12,sex:"man", name:"张三"}则指定对应名称的变量的值
  • 可以看到,相比数组形式的解构赋值,对象形式对赋值时的变量位置没有要求,只需要名称对应上即可。

函数参数解构赋值

首先是数组形式:

function sum([x,y,z]){
    return x + y + z;
}

console.log(sum([10,20,30])); // 60

然后是对象形式:


function msg({name,sex,age}){
    return `你好,${name},你的性别是${sex},年龄是${age},对吗?`;
}


console.log(msg({sex:"男",age:12,name:"张三"})); //你好,张三,你的性别是男,年龄是12,对吗?

箭头函数

箭头函数可以理解为普通函数形式的简写形式。

let f = function(p){
    return p;
}

可以简写为:

let f = p => p;

其中:

  • =>之前的p是传入的参数,之后的p是返回的值;

再比如:

let f = p => p * p;
console.log(f(12)); // 144

就变成了f(p) = p * p的效果。

再比如:

let sum = (a,b) => a+b;
console.log(sum(12,14)); // 26

可以看到两个参数,使用了括号和参数列表形式。

没有参数时,则必须写上()

let say_hello = () => "hello!";

console.log(say_hello()); // hello!

当函数比较复杂时,可以用{}和多行函数体形式:

let max = (a,b) => {
    if(a>b){
        return a;
    }else{
        return b;
    }
};

console.log(max(12,34));  // 34
console.log(max(120,34)); // 120

rest参数和扩展运算符

  • ...名称叫做rest参数,可以用于函数的不定项参数
  • ...[数组],此处的...叫做扩展运算符,可以将数组变为逗号分隔的多项形式
function sum(...nums){
    let n = 0;
    for (let num of nums){
        n += num;
    }
    return n;
}


console.log(sum(5,6,7,12,35)); // 65
  • ...之后跟变量名,并且用于函数参数,则是rest参数
console.log(...[12,14,16]); // 12 14 16
  • ...之后跟的是数组,则就是扩展运算符,其将数组元素拆分为单独的三个元素

Symbol

Symbol代表唯一值。

let s = Symbol('abc');

console.log(s); // Symbol(abc)
console.log(typeof s); // symbol
  • Symbol不是构造函数,不能使用new关键字,否则会有如下异常:
TypeError:Symbol is not a constructor
  • Symbol括号中内容代表Symbol描述,只是为了方便开发中辨识,并不是Symbol的值

Set和Map

  • Map是字典,用于保存键值对
let m = new Map();

m.set("name","张三");

console.log(m.get("name")); // 张三

以下是ES6中Map对象的常见属性和方法的总结表格:

属性/方法名称描述
Map.prototype.constructor创建实例对象的构造函数,对于Map实例,初始值为Map构造函数。
Map.prototype.size返回Map对象中的键值对数量。
Map.prototype[Symbol.toStringTag]返回字符串"Map",用于Object.prototype.toString()方法。
方法名称描述
Map.prototype.clear()移除Map对象中所有的键值对。
Map.prototype.delete(key)移除Map对象中指定的键值对,如果键值对存在并成功被移除,返回true,否则返回false
Map.prototype.entries()返回一个新的迭代器对象,包含Map对象中所有键值对[key, value]二元数组,以插入顺序排列。
Map.prototype.forEach(callbackFn, thisArg)以插入顺序为Map对象中的每个键值对调用一次callbackFn。如果提供了thisArg参数,则它将作为每一次回调的this值。
Map.prototype.get(key)返回与指定的键key关联的值,若不存在关联的值,则返回undefined
Map.prototype.has(key)返回一个布尔值,用来表明Map对象中是否存在与指定的键key关联的值。
Map.prototype.keys()返回一个新的迭代器对象,包含Map对象中所有元素的键,以插入顺序排列。
Map.prototype.set(key, value)Map对象中设置与指定的键key关联的值,并返回Map对象。
Map.prototype.values()返回一个新的迭代器对象,包含Map对象中所有的值,并以插入Map对象的顺序排列。
Map.prototype[Symbol.iterator]()返回一个新的迭代器对象,包含Map对象中所有元素[key, value]二元数组,以插入顺序排列。

这些是Map对象在ES6中的一些常见属性和方法,它们提供了对键值对集合的高效操作。

  • Set是集合,类似于去重数组

以下是ES6中Set对象的常见属性和方法的总结表格:

属性/方法名称描述
Set.prototype.constructor创建实例对象的构造函数,对于Set实例,初始值为Set构造函数。
Set.prototype.size返回Set对象中的元素数量。
Set.prototype[Symbol.toStringTag]返回字符串"Set",用于Object.prototype.toString()方法。
方法名称描述
Set.prototype.add(value)Set对象中添加一个新的元素。
Set.prototype.clear()移除Set对象中的所有元素。
Set.prototype.delete(value)移除Set对象中的指定元素,如果元素存在并成功被移除,返回true,否则返回false
Set.prototype.entries()返回一个新的迭代器对象,包含Set对象中每个元素的[value, value]二元数组,以插入顺序排列。
Set.prototype.forEach(callbackFn, thisArg)以插入顺序为Set对象中的每个元素调用一次callbackFn。如果提供了thisArg参数,则它将作为每一次回调的this值。
Set.prototype.has(value)返回一个布尔值,用来表明Set对象中是否包含指定的值。
Set.prototype.keys()返回一个新的迭代器对象,包含Set对象中所有元素的键,以插入顺序排列。由于Set只有键,所以keys()方法返回的迭代器和values()方法相同。
Set.prototype.values()返回一个新的迭代器对象,包含Set对象中所有的值,并以插入Set对象的顺序排列。
Set.prototype[Symbol.iterator]()返回一个新的迭代器对象,包含Set对象中所有元素[value, value]二元数组,以插入顺序排列。

这些是Set对象在ES6中的一些常见属性和方法,它们提供了对唯一值集合的高效操作。

proxy和Reflect

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

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

相关文章

串口数据记录仪DIY,体积小,全开源

作用 产品到客户现场出现异常情况,这个时候就需要一个日志记录仪、黑匣子,可以记录产品的工作情况,当出现异常时,可以搜集到上下文的数据,从而判断问题原因。 之前从网上买过,但是出现过丢数据的情况耽误…

51单片机Proteus仿真速成教程——P1-软件与配置+Proteus绘制51单片机最小系统+新建程序模版

前言:本文主要围绕 51 单片机最小系统的绘制及程序模板创建展开。首先介绍了使用 Proteus 绘制 51 单片机最小系统的详细步骤,包括软件安装获取途径、工程创建、器件添加(如单片机 AT89C51、晶振、电容、电阻、按键等)、外围电路&…

使用 pytesseract 进行 OCR 识别:以固定区域经纬度提取为例

引言 在智能交通、地图定位等应用场景中,经常会遇到需要从图像中提取经纬度信息的需求。本篇文章将介绍如何利用 Python 的 pytesseract 库结合 PIL 对图像进行预处理,通过固定区域裁剪,来有效地识别出图像上显示的经纬度信息。 1. OCR 与 …

【51单片机】程序实验15.DS18B20温度传感器

主要参考学习资料:B站【普中官方】51单片机手把手教学视频 开发资料下载链接:http://www.prechin.cn/gongsixinwen/208.html 单片机套装:普中STC51单片机开发板A4标准版套餐7 目录 DS18B20介绍主要特性内部结构控制时序初始化时序写时序读时序…

Vue项目上传到GitHub,vscode拉取vue项目更新后推送到GitHub上

1、新建Vue项目 2、在GitHub新建仓库 3、留意建立好仓库后提示的命令 4、进入vue项目目录,在空白处点击鼠标右键选择git bash here 5、输入命令 git init git add . git commit -m "注释内容" 输入之前创建GitHub仓库后记下的代码的第一句 git remote…

InternVL:论文阅读 -- 多模态大模型(视觉语言模型)

更多内容:XiaoJ的知识星球 文章目录 InternVL: 扩展视觉基础模型与通用视觉语言任务对齐1.概述2.InternVL整体架构1)大型视觉编码器:InternViT-6B2)语言中间件:QLLaMA。3)训练策略(1&#xff09…

【BUG】类文件具有错误的版本 61.0, 应为 52.0,请删除该文件或确保该文件位于正确的类路径子目录中。

报错: [ERROR] 类文件具有错误的版本 61.0, 应为 52.0 [ERROR] 请删除该文件或确保该文件位于正确的类路径子目录中。 报错截图: 原因:Java 版本和 Spring 不兼容,显示 Spring 版本过高 解决方法 1. 使用更高版本的 J…

康谋应用 | 基于多传感器融合的海洋数据采集系统

在海洋监测领域,基于无人艇能够实现高效、实时、自动化的海洋数据采集,从而为海洋环境保护、资源开发等提供有力支持。其中,无人艇的控制算法训练往往需要大量高质量的数据支持。然而,海洋数据采集也面临数据噪声和误差、数据融合…

双周报Vol.67: 模式匹配支持守卫、LLVM 后端发布、支持 Attribute 语法...多项核心技术更新!

2025-03-10 语言更新 模式匹配支持守卫(Pattern Guard) 模式守卫可以通过在模式后追加 if ... 的语法结构来指定。有模式守卫的分支只有在被模式匹配的值满足对应模式,并且模式守卫为真的情况下才会执行。如果模式守卫为假,则会…

MCP-代码解读TypeScript版本

MCP-代码解读TypeScript版本 文章目录 MCP-代码解读TypeScript版本1-参考网址2-TypeScript代码3-代码解读1-[非重点]定义函数2-[非重点]定义工具说明3-[重点]运行MCP服务 1-参考网址 B站视频参考 2-TypeScript代码 import { McpServer } from "modelcontextprotocol/sd…

写了一个二叉树构造函数和画图函数,方便debug

代码 class TreeNode(object):def __init__(self, val, leftNone, rightNone):self.val valself.left leftself.right rightdef construct_tree(nodes):if not nodes:return Noneroot TreeNode(nodes[0])queue [root]index 1while index < len(nodes):node queue.p…

docker 小记

一、卸载 查看当前版本 docker -v2. 如果有&#xff0c;先停止docker systemctl stop docker如果是yum安装&#xff0c;卸载方式为 #已防版本冲突&#xff0c;直接卸载 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-lat…

G-Star 公益行起航,挥动开源技术点亮公益!

公益组织&#xff0c;一直是社会温暖的传递者&#xff0c;但在数字化浪潮中&#xff0c;也面临着诸多比大众想象中复杂的挑战&#xff1a;项目管理如何更高效&#xff1f;志愿者管理又该如何创新&#xff1f;宣传推广怎么才能更有影响力&#xff1f;内部管理和技术支持又该如何…

k9s入门及实战

概述 k9s&#xff0c;GitHub&#xff0c;是用于管理k8s集群的CLI&#xff0c;提供一个终端UI来与k8s集群进行交互。通过封装kubectl功能&#xff0c;k9s会以特定时间间隔监控k8s的变化&#xff0c;默认为2秒&#xff0c;并提供后续命令来与k8s资源进行交互&#xff0c;k9s可让…

redis增加ip白名单

Redis增加IP白名单 随着互联网的快速发展&#xff0c;网络安全问题也日益凸显。为了保护服务器安全&#xff0c;我们常常需要对访问服务器的IP地址进行限制。而Redis作为一种高性能的缓存数据库&#xff0c;可以用来实现IP白名单功能。本文将介绍如何使用Redis来增加IP白名单&…

git commit messege 模板设置 (规范化管理git)

配置方法 git config --global core.editor vim &#xff08;设置 Git 的默认编辑器为 Vim&#xff09;在用户根目录下&#xff08;~&#xff09;&#xff0c;创建一个.git_commit_msg文件&#xff0c;然后把下面的内容拷贝到文件中并保存。 [version][模块][类型]{解决xxx问题…

Franka机器人ROS 2 发布:赋能机器人研究和行业应用

Franka机器人 ROS 2 发布&#xff1a;赋能机器人研究和行业应用 Franka ROS 2 发布&#xff1a;赋能机器人研究和行业应用 由zlem Odeh 于Franka Robotics 发布 在机器人操作系统 (ROS) 等技术和生态系统的推动下&#xff0c;机器人世界正以前所未有的速度发展。ROS 2 是广受…

docker部署jenkins,安装使用一条龙教程

Jenkins k8s 实现CI/CD 一、简介 1. JenKins是什么? Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 2. 什么是CI / CD…

短视频下载去水印,用什么工具好?

去除视频和图片水印是许多用户的需求&#xff0c;尤其是在分享或保存内容时。以下是6款超好用的工具&#xff0c;帮助你轻松去除水印&#xff0c;享受纯净的视觉体验&#xff1a; 1. 易下载去水印小程序 特点&#xff1a; 操作简单&#xff0c;支持抖音、快手、小红书、哔哩哔哩…

推理大模型时代,TextIn ParseX助力出版业知识资产重构

在大语言模型&#xff08;LLM&#xff09;与推理能力快速进化的技术浪潮下&#xff0c;出版机构沉淀数十年的非结构化数据资产&#xff0c;包括书籍、期刊、手稿及历史档案&#xff0c;正在焕发新的机遇。基于文档解析、NLP与大模型的推理生成能力&#xff0c;我们在图书馆层层…