[JavaScript] ES6及以后版本的新特性
文章目录
- 箭头函数(Arrow Functions)
- 为什么需要箭头函数?
- 箭头函数的完整语法
- 箭头函数中的 `this`
- 实用场景
- 解构赋值(Destructuring Assignment)
- 为什么需要解构赋值?
- 数组解构赋值的完整用法
- 对象解构赋值的完整用法
- 实用场景
- 模块化(Modules)
- 为什么需要模块化?
- 模块的基本概念
- 模板字面量(Template Literals)
- 为什么需要模板字面量?
- 模板字面量的基本语法
- 高级用法
- 使用场景
- Promise与异步编程
- 为什么需要 Promise 和异步编程?
- Promise 的语法与用法
- async 和 await
- 实用场景
箭头函数(Arrow Functions)
为什么需要箭头函数?
- 代码简洁:
对比代码:
// ES5 写法
const numbers = [1, 2, 3];
const squared = numbers.map(function (n) {return n * n;
});// ES6 箭头函数写法
const squared = numbers.map(n => n * n);
- ES5 中的函数定义通常会比较冗长,特别是在回调函数或嵌套逻辑中,代码可读性较差。
- 箭头函数通过简化语法,减少 `function` 和 `return` 等关键字的使用,使代码更加直观。
- 避免
this
问题:- 在 ES5 中,函数的
this
是由调用时动态决定的,可能会指向全局对象或undefined
,造成意外错误。 - 箭头函数继承了定义时的
this
(即词法作用域),从而避免了this
绑定问题。
- 在 ES5 中,函数的
箭头函数的完整语法
- 基本形式:
const func = (param1, param2) => {// 函数体return param1 + param2;
};
- 省略规则:
- 如果函数体只有一行表达式,并且需要返回值,可以省略大括号
{}
和return
:
- 如果函数体只有一行表达式,并且需要返回值,可以省略大括号
const add = (a, b) => a + b;
- 如果没有参数,必须加括号:
const greet = () => console.log("Hello!");
- 返回对象字面量:
如果需要返回一个对象字面量,必须用括号包裹,否则会与箭头函数的语法冲突:
const createPerson = (name, age) => ({ name, age });
console.log(createPerson("Kevin", 25)); // 输出 { name: "Kevin", age: 25 }
箭头函数中的 this
this
** 的词法作用域**:
示例:
// 普通函数中 this 的问题
function Timer() {this.seconds = 0;setInterval(function () {this.seconds++; // this 指向全局或 undefinedconsole.log(this.seconds);}, 1000);
}// 用箭头函数解决
function Timer() {this.seconds = 0;setInterval(() => {this.seconds++; // this 绑定到 Timer 对象console.log(this.seconds);}, 1000);
}
- 箭头函数不会创建自己的 `this`,它会从外层作用域中继承 `this`。
- 这在回调函数中尤为重要,避免了手动绑定 `this` 的麻烦。
- 无法用作构造函数:
箭头函数没有[[Construct]]
方法,因此不能使用new
来调用。
const Person = (name) => {this.name = name;
};// new Person("Kevin"); // 报错
实用场景
- 回调函数:
const numbers = [1, 2, 3, 4];
const doubled = numbers.map(n => n * 2); // 简化 map 回调
- 事件监听:
const button = document.querySelector("button");
button.addEventListener("click", () => {console.log("Button clicked!");
});
解构赋值(Destructuring Assignment)
为什么需要解构赋值?
- 简化代码:
在传统写法中,获取数组或对象的特定值需要多次声明变量。解构赋值直接在一行代码中完成这一任务,使代码更紧凑。对比代码:
// ES5 写法
const person = { name: "Kevin", age: 25 };
const name = person.name;
const age = person.age;// ES6 解构赋值
const { name, age } = person;
- 避免多次访问对象属性:
解构赋值减少了对同一对象或数组的多次访问,提升性能。
数组解构赋值的完整用法
- 按顺序提取值:
const arr = [10, 20, 30];
const [first, second] = arr;
console.log(first, second); // 输出 10 20
- 跳过某些值:
const arr = [1, 2, 3];
const [, second] = arr;
console.log(second); // 输出 2
- 使用默认值:
const arr = [10];
const [first, second = 20] = arr;
console.log(second); // 输出 20
对象解构赋值的完整用法
- 基础用法:
const obj = { x: 10, y: 20 };
const { x, y } = obj;
console.log(x, y); // 输出 10 20
- 别名(重命名):
const obj = { x: 10, y: 20 };
const { x: newX, y: newY } = obj;
console.log(newX, newY); // 输出 10 20
- 嵌套解构:
const obj = { person: { name: "Kevin", age: 25 } };
const { person: { name, age } } = obj;
console.log(name, age); // 输出 Kevin 25
实用场景
- 函数参数:
function greet({ name, age }) {console.log(`Hello, ${name}. You are ${age} years old.`);
}
greet({ name: "Kevin", age: 25 });
- 交换变量值:
let a = 1, b = 2;
[a, b] = [b, a];
console.log(a, b); // 输出 2 1
模块化(Modules)
为什么需要模块化?
在 ES5 之前,JavaScript 没有原生模块化系统,开发者通常使用全局变量或外部库(如 require.js
)来实现模块化。但这会导致代码难以维护、命名冲突等问题。
模块的基本概念
- 导出模块:
- 命名导出:可以导出多个变量或函数。
export const name = "Kevin";
export function greet() {console.log("Hello!");
}
- **默认导出**:每个模块只能有一个默认导出。
export default function greet() {console.log("Hello!");
}
- 引入模块:
- 引入命名导出:
import { name, greet } from "./module.js";
- **引入默认导出**:
import greet from "./module.js";
好的,以下将针对剩余的 模板字面量(Template Literals) 和 Promise与异步编程 进行更加详细的讲解,包括其语法背景、具体用法、以及背后的原理和实用场景。
模板字面量(Template Literals)
为什么需要模板字面量?
在 ES5 中,字符串的操作非常繁琐,尤其是在拼接变量时,需要使用 +
串联,且难以处理多行字符串。此外,插入表达式和动态生成内容也较为麻烦。
模板字面量 的出现解决了这些问题,提供了一种更加优雅的方式来处理字符串。
模板字面量的基本语法
- 模板字面量的定义:用反引号 ``(反引号 ` 而不是单引号 ')定义的字符串。**
const message = `这是一个模板字面量`;
- 插入变量(占位符):
使用${}
将变量或表达式嵌入到字符串中:
const name = "Kevin";
const age = 25;
const message = `Hello, my name is ${name} and I am ${age} years old.`;
console.log(message); // 输出:Hello, my name is Kevin and I am 25 years old.
- 多行字符串:
在 ES5 中,我们需要通过\n
或字符串拼接实现多行字符串,这不仅麻烦而且不直观。- ES5 写法:
const text = "这是第一行\n" +"这是第二行";
console.log(text);
- **模板字面量写法**:
const text = `这是第一行
这是第二行`;
console.log(text); // 输出多行字符串
- 嵌入表达式:
可以直接在${}
中编写表达式,而不仅仅是变量:
const a = 10, b = 20;
const result = `结果是:${a + b}`;
console.log(result); // 输出:结果是:30
高级用法
- 函数调用:
模板字面量支持在${}
中直接调用函数:
function greet(name) {return `Hello, ${name}!`;
}
const message = `${greet("Kevin")}`;
console.log(message); // 输出:Hello, Kevin!
- 标签模板(Tagged Template Literals):
标签模板允许我们通过函数对模板字面量进行自定义解析。
function highlight(strings, ...values) {return strings.reduce((result, str, i) => {return `${result}${str}<strong>${values[i] || ""}</strong>`;}, "");
}const name = "Kevin";
const age = 25;
const message = highlight`Name: ${name}, Age: ${age}`;
console.log(message);
// 输出:Name: <strong>Kevin</strong>, Age: <strong>25</strong>
- 嵌套模板字面量:
支持嵌套使用模板字面量:
const user = { name: "Kevin", age: 25 };
const info = `User Info: ${`Name: ${user.name}, Age: ${user.age}`}`;
console.log(info);
// 输出:User Info: Name: Kevin, Age: 25
使用场景
- 动态生成 HTML:
模板字面量非常适合用于构建动态 HTML 字符串:
const name = "Kevin";
const html = `<div><h1>${name}</h1><p>欢迎访问我的网站!</p></div>`;
console.log(html);
- 构建 SQL 查询:
const table = "users";
const column = "name";
const sql = `SELECT ${column} FROM ${table} WHERE active = 1`;
console.log(sql);
// 输出:SELECT name FROM users WHERE active = 1
Promise与异步编程
为什么需要 Promise 和异步编程?
在 JavaScript 中,异步操作(如网络请求、文件读取、定时器等)是常见场景。
传统的异步处理方式(如回调函数)可能会导致 回调地狱(Callback Hell),使代码难以阅读和维护。
Promise 和 async/await
的引入解决了这些问题,使异步代码更加可读和可维护。
Promise 的语法与用法
- 创建 Promise:
Promise 是一个对象,表示一个异步操作的最终完成(或失败)及其结果。
它有三种状态:
示例:
const promise = new Promise((resolve, reject) => {const success = true;if (success) {resolve("操作成功");} else {reject("操作失败");}
});promise.then(result => console.log(result)) // 操作成功.catch(error => console.log(error)); // 捕获错误
- `pending`:初始状态,操作尚未完成。
- `fulfilled`:操作成功完成。
- `rejected`:操作失败。
- 链式调用:
Promise 支持链式调用,使代码逻辑更清晰。
const fetchData = () => {return new Promise(resolve => {setTimeout(() => resolve("数据加载完成"), 1000);});
};fetchData().then(data => {console.log(data);return "处理后的数据";}).then(processed => console.log(processed));
- Promise.all:
并行执行多个 Promise,并等待所有完成:
const p1 = new Promise(resolve => setTimeout(() => resolve(1), 1000));
const p2 = new Promise(resolve => setTimeout(() => resolve(2), 2000));Promise.all([p1, p2]).then(results => console.log(results));
// 输出:[1, 2]
async 和 await
- 为什么需要 async/await?
async/await
是 Promise 的语法糖,使异步代码看起来像同步代码,极大地提高了代码的可读性。
- 基本用法:
示例:
const fetchData = () => {return new Promise(resolve => setTimeout(() => resolve("数据加载完成"), 1000));
};async function loadData() {const data = await fetchData();console.log(data); // 输出:数据加载完成
}loadData();
- 使用 `async` 声明一个函数,该函数返回一个 Promise。
- 使用 `await` 暂停异步操作,直到 Promise 完成。
- 错误处理:
可以使用try...catch
捕获错误:
async function fetchWithErrorHandling() {try {const response = await fetch("https://api.example.com/data");const data = await response.json();console.log(data);} catch (error) {console.error("请求出错:", error);}
}
实用场景
- 数据请求:
async function fetchData() {const response = await fetch("https://jsonplaceholder.typicode.com/posts/1");const post = await response.json();console.log(post);
}fetchData();
- 动画和定时器:
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));async function run() {console.log("开始");await delay(1000); // 等待 1 秒console.log("结束");
}run();
相关文章:
[JavaScript] ES6及以后版本的新特性
文章目录 箭头函数(Arrow Functions)为什么需要箭头函数?箭头函数的完整语法箭头函数中的 this实用场景 解构赋值(Destructuring Assignment)为什么需要解构赋值?数组解构赋值的完整用法对象解构赋值的完整…...
IO进程 寒假作业
一、请使用消息队列实现2个终端之间互相聊天 #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <sys/wait.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> …...
无公网IP 外网访问媒体服务器 Emby
Emby 是一款多媒体服务器软件,用户可以在 Emby 创建自己的个人多媒体娱乐中心,并且可以跨多个设备访问自己的媒体库。它允许用户管理传输自己的媒体内容,比如电影、电视节目、音乐和照片等。 本文将详细的介绍如何利用 Docker 在本地部署 Emb…...
【2025小年源码免费送】
💖学习知识需费心, 📕整理归纳更费神。 🎉源码免费人人喜, 🔥码农福利等你领! 💖山高路远坑又深, 📕大军纵横任驰奔, 🎉谁敢横刀立马行…...
哈希表示例
示例1 两数之和 "两数之和"(Two Sum)是LeetCode上的一个经典算法问题,编号为1,它要求在一个整数数组nums中找到两个不同的索引i和j,使得nums[i] nums[j] target。 问题描述: 给定一个整数数…...
VS企业版和专业版的区别
网上查询vs分析dump文件,查找托管内存泄露,需要使用“调试托管内存”功能,当前安装的vs2022 专用版找不到这个选项,vs2015是ok的,比较版本发现2022是专业版,2015是企业版。网上搜索专业版和企业版差异如下&…...
YOLOv10-1.1部分代码阅读笔记-train.py
train.py ultralytics\models\yolov10\train.py 目录 train.py 1.所需的库和模块 2.class YOLOv10DetectionTrainer(DetectionTrainer): 1.所需的库和模块 from ultralytics.models.yolo.detect import DetectionTrainer from .val import YOLOv10DetectionValidator fr…...
autogen 自定义agent (1)
目录 第一个自定义agent:CountDownAgent代码运行逻辑1. 创建 CountDownAgent 代理2. 处理消息3. 运行 CountDownAgent 另一种调用方式类似的agent: CountUpAgent 第一个自定义agent:CountDownAgent from typing import AsyncGenerator, List, Sequence,…...
ssh密钥登录GitHub时一直提示“Error: Permission denied (publickey)”
起因 环境:Windows10 背景:之前就是按照官方说明创建个rsa密钥,在git后台添加上,就行了,近期怎么添加怎么失败,总是“Error: Permission denied (publickey)”的提示! 尝试 各种尝试…...
多模态数据融合的基本流程与关键环节
多模态数据融合作为人工智能的重要技术方向,不仅整合了视觉、语言、语音、传感器等多种模态的数据,还通过合理的融合方法让机器获得更全面的感知能力。那么,多模态数据融合的过程是怎样的?有哪些关键环节需要注意?今天…...
k8s 蓝绿发布、滚动发布、灰度发布
在Kubernetes(k8s)中,蓝绿发布、滚动发布、灰度发布(金丝雀发布)是三种常见的应用部署和更新策略。下面将分别对这几种发布方式进行说明,并给出相应的例子。 蓝绿发布 蓝绿发布是一种无缝切换版本的部署策…...
【PyCharm】连接Jupyter Notebook
【PyCharm】相关链接 【PyCharm】连接 Git【PyCharm】连接Jupyter Notebook【PyCharm】快捷键使用【PyCharm】远程连接Linux服务器【PyCharm】设置为中文界面 【PyCharm】连接Jupyter Notebook PyCharm连接Jupyter Notebook的过程可以根据不同的需求分为 本地连接 和 远程连…...
【miniconda】:langraph的windows构建
langraph需要python3.11 langraph强烈建议使用py3.11 默认是3.12 官方 下载仓库 下载老版本的python (后续发现新版miniconda也能安装老版本的python) 在这里...
NRF52840 USB Dongle 进行蓝牙抓包
1、可视化抓包 官方的工具 链接:RF Connect for Desktop ,之后使用 bluetooth Low Energy 即可查看抓包数据。不做说明。 本节主要说明,使用wireshark进行抓包数据的显示。 1.1、硬件 Nordic Semiconductor 官网链接 的截图如下。国内封装…...
【C++】详细讲解继承(下)
本篇来继续说说继承。上篇可移步至【C】详细讲解继承(上) 1.继承与友元 友元关系不能继承 ,也就是说基类友元不能访问派⽣类私有和保护成员。 class Student;//前置声明class Same //基类 { public:friend void Fun(const Same& p, con…...
OS Copilot功能测评:智能助手的炫彩魔法
简介: OS Copilot 是一款融合了人工智能技术的智能助手,专为Linux系统设计,旨在提升系统管理和运维效率。本文详细介绍了在阿里云ECS实例上安装和体验OS Copilot的过程,重点评测了其三个核心参数:-t(模式…...
Gin 学习笔记
教程地址:https://www.bilibili.com/video/BV1FV4y1C72M?spm_id_from333.788.videopod.sections&vd_source707ec8983cc32e6e065d5496a7f79ee6 01-项目搭建 各常用目录的说明: https://github.com/golang-standards/project-layout/blob/master/REA…...
windows在命令行中切换盘符
一、问题描述 我们在使用windows的cmd(命令行)时,经常需要用cd命令在不同盘之间切换路径。但有时在不同盘之间切换时,会发现命令不起作用。 如下图所示,直接切换目录还是停留在原来的位置。 二、解决方法 首先切换盘符…...
OpenAI模块重构
文章目录 1.common-openai-starter1.目录结构2.OpenAiProperties.java 新增apiUrl3.OpenAIAutoConfiguration.java4.OpenAiClient.java 使用gson重构 2.common-openai-starter-demo1.目录结构2.application.yml 新增api-url3.OpenAiController.java4.OpenAiApplication.java5.测…...
表的增删改查(MySQL)
1. 表的增删改查 CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) 1.1 Create 语法: INSERT [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ...value_list:…...
Go 不可重复协程安全队列
代码实现 package dataStructimport ("errors""sync" )// GenericQueue 是一个支持泛型的不可重复队列,具有最大长度限制 // T 是泛型参数 type GenericQueue[T comparable] struct {items map[T]struct{} // 使用 map 来存储元素order []…...
每日一题 419. 棋盘上的战舰
419. 棋盘上的战舰 简单 class Solution { public:int countBattleships(vector<vector<char>>& board) {int ans 0;for(int i0;i<board.size();i){for(int j0;j<board[0].size();j){if(board[i][j] X){dfs(board,i,j);ans;}}}return ans;}void dfs(…...
spring cloud alibaba 使用示例
spring cloud alibaba example spring cloud alibaba nacos 配置中心、spring cloud alibaba nacos 服务注册与发现、openfeign 服务调用、spring cloud loadbalancer 负载均衡、spring cloud alibaba sentinel 限流降级、spring cloud alibaba seata 分布式事务、spring clou…...
Python数据分析-Python语法基础,IPython和Jupyter-Notebooks(二)
title: ‘Python数据分析:Python语法基础,IPython和Jupyter Notebooks(二)’ tags: python数据分析 categories:python数据分析 keywords:python数据分析 cover: …/img/404_icecream_whale.png description: 本文介绍python的基础语法和jup…...
领域驱动设计(DDD)Spring Boot 3 实现 二
使用 Spring Boot 3 实现领域驱动设计(DDD)是一种很自然的选择,因为 Spring 提供了良好的生态支持,特别是在分层架构、依赖管理、事件驱动等方面。以下是如何在 Spring Boot 3 中结合 DDD 进行开发的详细指南: 项目结构…...
Vue.js 高级组件开发
Vue.js 高级组件开发:构建一个智能动态表单生成器 ——从可复用架构到性能优化的全链路实践 引言:为什么需要高级组件? 在现代前端开发中,组件不仅是UI的封装,更是业务逻辑的载体。一个“高级”Vue组件应当具备&…...
wangEditor富文本编辑器,Laravel上传图片配置和使用
文章目录 前言步骤1. 构造好前端模版2. 搭建后端存储3. 调试 前言 由于最近写项目需要使用富文本编辑器,使用的是VUE3.0版本所以很多不兼容,实际测试以后推荐使用wangEditor 步骤 构造好前端模版搭建后端存储调试 1. 构造好前端模版 安装模版 模版安…...
Hive之加载csv格式数据到hive
场景: 今天接了一个需求,将测试环境的hive数据导入到正式环境中。但是不需要整个流程的迁移,只需要迁移ads表 解决方案: 拿到这个需求首先想到两个方案: 1、将数据通过insert into语句导出,然后运行脚本 …...
0164__【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os
【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os_gcc -o0-CSDN博客...
《DiffIR:用于图像修复的高效扩散模型》学习笔记
paper:2303.09472 GitHub:GitHub - Zj-BinXia/DiffIR: This project is the official implementation of Diffir: Efficient diffusion model for image restoration, ICCV2023 目录 摘要 1、介绍 2、相关工作 2.1 图像恢复(Image Rest…...
[Datawheel]利用Zigent框架编写智能体-2
书接上回 1. Zigent实现教程编写智能体 本节将通过 Zigent 框架实现一个教程编写智能体,其主要功能是输入教程主题,然后自动生成完整的教程内容。 设计思路: 先通过 LLM 大模型生成教程的目录,再对目录按照二级标题进行分块&…...
cursor重构谷粒商城05——docker容器化技术快速入门【番外篇】
前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。 本项目将基于谷粒商城…...
Django项目的创建及运行——Django学习日志(一)
1.命令行创建 (1)创建项目 django-admin startproject HelloWorld(这里的名称任意) (2)创建应用(app) 首先要进入到项目目录,比如我这里的项目目录为HelloWorld cd …...
gesp(C++六级)(1)洛谷:P10250:[GESP样题 六级] 下楼梯
gesp(C六级)(1)洛谷:P10250:[GESP样题 六级] 下楼梯 题目描述 顽皮的小明发现,下楼梯时每步可以走 1 1 1 个台阶、 2 2 2 个台阶或 3 3 3 个台阶。现在一共有 N N N 个台阶,你能帮小明算算有多少种方案…...
1.23学习
misc buuctf-小明的保险箱 打开附件是一个在线图片首先将其另存为,然后仅仅只是一个图片,而无其他信息,那么我们再进行binwalk或者foremost文件分离,得到了一个文件夹,其中含有一个压缩包但是是一个加密的࿰…...
atheris从安装到fuzz输入输出解读
1. 引入 模糊测试是一种自动化的软件测试技术,它通过自动生成大量随机数据作为输入来测试程序,以发现潜在的错误、漏洞或崩溃。atheris是一个专门用于CPython(Python的C语言实现)的模糊测试框架。 2. 安装atheris 参考1&#x…...
基于自然语言处理的垃圾短信识别系统
基于自然语言处理的垃圾短信识别系统 🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 目录 设计题目设计目的设计任务描述设计要求输入和输出…...
PAT甲级-1022 Digital Libiary
题目 题目大意 一个图书有图书id,书名,作者,关键字,出版商,出版时间6个信息。现要查询图书的ID,1对应通过书名查询,2对应作者,3对应关键字(不需要完全一致,包…...
GD32F470 USB虚拟串口
1. 硬件连接 确保GD32F470开发板的USB接口连接到PC的USB端口。开发板通常提供USB FS(全速)接口,可以直接使用。 2. 配置USB功能 需要配置USB时钟、GPIO和中断,以支持全速USB设备模式。 2.1 配置USB时钟 c复制 void usb_rcu_…...
25美赛ABCDEF题详细建模过程+可视化图表+参考论文+写作模版+数据预处理
详情见该链接!!!!!! 25美国大学生数学建模如何准备!!!!!-CSDN博客文章浏览阅读791次,点赞13次,收藏7次。通过了解比赛基本…...
【转帖】eclipse-24-09版本后,怎么还原原来版本的搜索功能
【1】原贴地址:eclipse - 怎么还原原来版本的搜索功能_eclipse打开类型搜索类功能失效-CSDN博客 https://blog.csdn.net/sinat_32238399/article/details/145113105 【2】原文如下: 更新eclipse-24-09版本后之后,新的搜索功能(CT…...
Elasticsearch 性能测试工具 Loadgen 之 002——命令行及参数详解
上一讲,我们讲解了 Loadgen 的极简部署方式、配置文件、快速使用从 0 到 1 方式。 本讲,我们主要解读一下 Loadgen 的丰富的命令行及参数含义。 有同学可能会说,上面不是介绍很清楚了吗?但,咱们还是有必要详细中文解读…...
DRG/DIP 2.0时代下基于PostgreSQL的成本管理实践与探索(下)
五、数据处理与 ETL 流程编程实现 5.1 数据抽取与转换(ETL) 在 DRG/DIP 2.0 时代的医院成本管理中,数据抽取与转换(ETL)是将医院各个业务系统中的原始数据转化为可供成本管理分析使用的关键环节。这一过程涉及从医院 HIS 系统中抽取患者诊疗数据,并对其进行格式转换、字…...
【设计模式-行为型】状态模式
一、什么是状态模式 什么是状态模式呢,这里我举一个例子来说明,在自动挡汽车中,挡位的切换是根据驾驶条件(如车速、油门踏板位置、刹车状态等)自动完成的。这种自动切换挡位的过程可以很好地用状态模式来描述。状态模式…...
想品客老师的第六天:函数
函数基础的部分写在这里 函数声明 在js里万物皆对象,函数也可以用对象的方式定义 let func new Function("title", "console.log(title)");func(我是参数title); 也可以对函数赋值: let cms function (title) {console.log(tit…...
hedfs和hive数据迁移后校验脚本
先谈论校验方法,本人腾讯云大数据工程师。 1、hdfs的校验 这个通常就是distcp校验,hdfs通过distcp迁移到另一个集群,怎么校验你的对不对。 有人会说,默认会有校验CRC校验。我们关闭了,为什么关闭?全量迁…...
面向通感一体化的非均匀感知信号设计
文章目录 1 非均匀信号设计的背景分析1.1 基于OFDM波形的感知信号1.2 非均匀信号设计的必要性和可行性1.2 非均匀信号设计的必要性和可行性 3 通感一体化系统中的非均匀信号设计方法3.1 非均匀信号的设计流程(1)均匀感知信号设计(2࿰…...
React将props传递给一个组件
React 组件通讯:从单向数据流到跨层级交互的深度实践 ——基于 Props 的通讯机制解析与高阶模式探索 一、Props 的本质:不可变数据管道 React 的 props(properties)机制构建了单向数据流的核心范式。每个父组件通过 props 向子…...
头歌实训作业 算法设计与分析-贪心算法(第2关:最优装载问题)
任务描述 有一批集装箱要装上一艘载重量为C的轮船,共有n个集装箱,其中集装箱i的重量为Wi。 最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。 测试说明 输入和输出说明: 第1行为集装箱数目n和载重限…...
HarmonyOS基于ArkTS卡片服务
卡片服务 前言 Form Kit(卡片开发框架)提供了一种在桌面、锁屏等系统入口嵌入显示应用信息的开发框架和API,可以将应用内用户关注的重要信息或常用操作抽取到服务卡片(以下简称“卡片”)上,通过将卡片添加…...