js版本ES6、ES7、ES8、ES9、ES10、ES11、ES12、ES13、ES14[2023]新特性

ES全称ECMAScript,ECMAScript是ECMA制定的标准化脚本语言,本文讲述Javascript[ECMAScript]版本ES6、ES7、ES8、ES9、ES10、ES11、ES12、ES13、ES14[2023]的新特性,帮助朋友们更好的熟悉和使用Javascript

ES5

1.严格模式

use strict

2.Object

   getPrototypeOf,返回一个对象的原型
    getOwnPropertyDescriptor,返回某个对象自有属性的属性描述符
    getOwnPropertyNames,返回一个数组,包括对象所有自由属性名称集合(包括不可枚举的属性)
    hasOwnProperty,给定属性存在于对象实例中,返回 true
    isPrototypeOf,在原型链中出现过的原型,返回 true
    create,创建一个拥有指定原型和若干指定属性的对象
    defineProperty,为对象定义一个新属性,或者修改已有的属性,并对属性重新设置 getter 和 setter,这里可以被用作数据绑定的对象劫持用途
    defineProperties,在一个对象上添加或修改一个或者多个自有属性,与 defineProperty 类似
    seal,锁定对象,阻止修改现有属性的特性,并阻止添加新属性,但是可以修改已有属性的值
    freeze,冻结对象,阻止对对象的一切操作和更改,冻结对象将变成只读
    preventExtensions,让一个对象变得不可以扩展,也就是不能再添加新的属性
    isSealed,判断对象是否被锁定
    isFrozen,判断对象是否被冻结
    isExtensible,判断对象是否可以被扩展
    keys,返回一个由给定对象的所有可以枚举自身属性的属性名组成的数组

3.Array

Array.isArray,确定某个值到底是不是数组,不管它在哪个全局执行环境中创建
    push,接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度
    pop,在数组尾部移除最后一项,减少数组的 length 值,然后返回移除的项
    shift,移除数组中的第一项并返回该项,同时将数组长度减 1
    unshift,在数组前端添加任意个项,并返回新数组的长度
    reverse,反转数组项的顺序,返回排序后的数组
    sort,默认情况下,按升序排序数组项,返回排序后的数组
    concat,创建当前数组的一个副本,将接收到的参数添加到这个副本的末尾,返回新构建的数组
    join,用指定的字符拼接数组,返回拼接好的字符串
    slice,基于当前数组中的一个或多个创建一个新数组,不影响原始数组
    splice,根据传入参数不同,可以删除、插入、替换数组元素,返回一个数组,该数组中包含从原始数组中删除的项,如果没有删除任何项,则返回空数组
    indexOf,返回根据给定元素找到的第一个索引值,如果不存在则返回 -1
    lastIndexOf,返回指定元素在数组中的最后一个索引值,如果不存在则返回 -1
    every ,对数组中的每一项运行给定函数 ,如果该函数对每一项都返回 true,则返回 true
    filter,对数组中的每一项运行给定函数 ,返回该函数会返回 true 的项组成的数组
    forEach,对数组中的每一项运行给定函数,没有返回值
    map,对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组
    some,对数组中的每一项运行给定函数,如果函数对任一项返回 true,则返回 truereduce,接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终缩减为一个值
    reduceRight,接收一个函数作为累加器,数组中的每个值(从右到左)开始缩减,最终缩减为一个值

4.String

charAt,访问字符串中特定字符,返回给定位置的字符
    charCodeAt,访问字符串中特定字符,返回给定位置的字符的字符编码
    concat,将一个或多个字符串拼接起来,返回拼接得到的新字符串
    match,查找匹配的字符串,返回一个数组
    search,查找匹配的字符串,返回匹配项的索引,没有找到,返回 -1
    replace,替换字符串
    split,基于指定的分隔符将一个字符串分割成多个字符串,将结果放在一个数组中,并返回
    trim,创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果
    localeCompare,比较两个字符串
    slice,返回被操作字符串的一个子字符串
    substr,返回被操作字符串的一个子字符串
    substring,返回被操作字符串的一个子字符串

注意:slice、substr、substring 都接受一个或两个参数,第一个参数指定字符串的开始位置,第二个参数表示子字符串到哪里结束,slice 和 substring 的第二个参数指定的是子字符串的最后一个字符后面的位置,substr 第二个参数指定的是返回的字符个数,如果没有传递第二个参数,则将字符串的末尾作为结束位置。

5.Function

 	arguments.callee,该属性是一个指针,指向拥有这个 arguments 对象的函数
    arguments.caller,该属性保存着调用当前函数的函数的引用
    apply,在特定的作用域中调用函数,第一个参数是在其中运行函数的作用域,第二个是参数数组
    call,在特定的作用域中调用函数,第一个参数是在其中运行函数的作用域,其余参数直接传递给函数
    bind,创建一个函数的实例,其 this 值会被绑定到传给 bind 函数的值

6.JSON

	JSON.parse,解析字符串为 JSON 对象
    JSON.stringify,解析 JSON 对象为字符串
    JSON.valueOf,获取某个JSON 对象中的值
    JSON.toString,被调用时,会调用 Object 原型上的 toString 方法,会获的 JSON 对象的值并转为字符串,如果没有具体的值,则返回原型数组
    JSON.toLocaleString,也是Object 原型上的方法,经常会返回与 toString 相同内容,但是对于 Date 对象,则会返回格式化的时间字符串

7.其他

  Date.now,返回当前时间戳
    Date.toJSON,将 Date 对象转换为字符串,格式为 JSON 日期
    Math.min,确定一组数值中的最小值
    Math.max,确定一组数值中的最大值
    Math.random,返回大于 0 小于 1 的一个随机数
    Number.prototype.toFixed,按照指定的小数位返回数值的字符串表示

ES6(2015)

1.类

class Man {
   
  constructor(name) {
   
    this.name = '你好世界';
  }
  console() {
   
    console.log(this.name);
  }
}
const man = new Man('你好世界');
man.console(); // 你好世界
创建类的几种方法:
	在 JavaScript 中,创建类有几种不同的方式。以下是几种常见的方法:
1. 使用 class 关键字(ES6+)

这是 ES6 引入的一种标准语法来创建类,语法简洁易懂。

javascript
class Person {
   
  constructor(name, age) {
   
    this.name = name;
    this.age = age;
  }

  greet() {
   
    console.log(`Hello, my name is ${
    this.name} and I am ${
    this.age} years old.`);
  }
}

const person = new Person('Alice', 30);
person.greet();  // 输出: Hello, my name is Alice and I am 30 years old.

2. 使用函数构造器(传统方式)

在 ES6 之前,使用函数构造器来模拟类。函数构造器通过 new 关键字来创建实例,并通过原型链定义方法。

javascript
function Person(name, age) {
   
  this.name = name;
  this.age = age;
}

Person.prototype.greet = function() {
   
  console.log(`Hello, my name is ${
    this.name} and I am ${
    this.age} years old.`);
};

const person = new Person('Bob', 25);
person.greet();  // 输出: Hello, my name is Bob and I am 25 years old.

3. 使用 Object.create() 和构造函数

通过 Object.create() 可以创建一个对象并设置它的原型,进而模拟类的行为。

javascript
const PersonPrototype = {
   
  greet: function() {
   
    console.log(`Hello, my name is ${
    this.name} and I am ${
    this.age} years old.`);
  }
};

function Person(name, age) {
   
  const obj = Object.create(PersonPrototype);
  obj.name = name;
  obj.age = age;
  return obj;
}

const person = Person('Charlie', 40);
person.greet();  // 输出: Hello, my name is Charlie and I am 40 years old.

4. 使用 class 和继承(ES6+)

ES6 的 class 语法支持继承,可以通过 extends 关键字来实现。

javascript
class Animal {
   
  constructor(name) {
   
    this.name = name;
  }

  speak() {
   
    console.log(`${
    this.name} makes a noise.`);
  }
}

class Dog extends Animal {
   
  constructor(name) {
   
    super(name);  // 调用父类的构造函数
  }

  speak() {
   
    console.log(`${
    this.name} barks.`);
  }
}

const dog = new Dog('Rex');
dog.speak();  // 输出: Rex barks.

5. 使用 ES6 class 和静态方法

class 还支持静态方法,这些方法不会被实例化,而是直接在类本身上调用。

javascript
class Calculator {
   
  static add(a, b) {
   
    return a + b;
  }

  static subtract(a, b) {
   
    return a - b;
  }
}

console.log(Calculator.add(5, 3));  // 输出: 8
console.log(Calculator.subtract(5, 3));  // 输出: 2

6. 使用 ES5 构造函数结合原型链和静态方法

在传统的 ES5 中,也可以通过原型链结合静态方法来模拟类的功能。

function Car(make, model) {
   
  this.make = make;
  this.model = model;
}

Car.prototype.drive = function() {
   
  console.log(`${
    this.make} ${
    this.model} is driving.`);
};

Car.getBrand = function() {
   
  return 'Generic Car Brand';
};

const car = new Car('Toyota', 'Camry');
car.drive();  // 输出: Toyota Camry is driving.
console.log(Car.getBrand());  // 输出: Generic Car Brand

2.模块化(ES Module)

// 模块 A 导出一个方法
export const sub = (a, b) => a + b;
// 模块 B 导入使用
import {
    sub } from './A';
console.log(sub(1, 2)); // 3

3.箭头(Arrow)函数

const func = (a, b) => a + b;
func(1, 2); // 3

箭头函数(Arrow Function)是 JavaScript 中一种简化函数写法的语法,它使用 => 符号来定义函数。箭头函数提供了一种更简洁的方式来定义匿名函数,同时也改变了 this 关键字的行为。
基本语法

javascript
const functionName = (parameters) => {
   
  // 函数体
};

示例
1. 简单的箭头函数

javascript
const add = (a, b) => {
   
  return a + b;
};

console.log(add(2, 3));  // 输出: 5

2. 单行箭头函数(隐式返回)

如果箭头函数的主体只有一个表达式,可以省略 return 关键字,并且该表达式的值会被自动返回。

javascript
const add = (a, b) => a + b;

console.log(add(2, 3));  // 输出: 5

3. 无参数的箭头函数

如果没有参数,仍然需要一个空的括号。

javascript
const greet = () => console.log('Hello!');

greet();  // 输出: Hello!

4. 只有一个参数的箭头函数

如果函数只有一个参数,可以省略括号。

javascript
const square = x => x * x;

console.log(square(5));  // 输出: 25

箭头函数的特点
1. this 绑定

箭头函数最显著的特点是它不会创建自己的 this,而是继承外部上下文中的 this。这意味着箭头函数中的 this 与外部的 this 相同,而常规函数会根据调用的上下文来决定 this。

javascript
// 使用常规函数时,`this` 指向的是调用函数的对象
function Person(name) {
   
  this.name = name;
}

Person.prototype.greet = function() {
   
  console.log(`Hello, ${
    this.name}`);
};

const john = new Person('John');
john.greet();  // 输出: Hello, John

// 使用箭头函数时,`this` 继承自外部环境
function Person(name) {
   
  this.name = name;
  setTimeout(() => {
   
    console.log(`Hello, ${
    this.name}`);
  }, 1000<

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

负载均衡集群( LVS 相关原理与集群构建 )

目录 1、LVS 相关原理 1.1、LVS集群的体系结构以及特点 1.1.1 LVS简介 1.1.2 LVS体系结构 1.1.3 LVS相关术语 1.1.4 LVS工作模式 1.1.5 LVS调度算法 1.2 LVS-DR集群介绍 1.2.1 LVS-DR模式工作原理 1.2.2 LVS-DR模式应用特点 1.2.3 LVS-DR模式ARP抑制 1.3 LVS – NA…

深度解析:使用 Headless 模式 ChromeDriver 进行无界面浏览器操作

一、问题背景&#xff08;传统爬虫的痛点&#xff09; 数据采集是现代网络爬虫技术的核心任务之一。然而&#xff0c;传统爬虫面临多重挑战&#xff0c;主要包括&#xff1a; 反爬机制&#xff1a;许多网站通过检测请求头、IP地址、Cookie等信息识别爬虫&#xff0c;进而限制…

[Android]APP自启动

APP添加自启动权限&#xff0c;重启设备后自动打开APP。 1.AndroidManifest.xml <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.an…

Kubernetes 使用 Kube-Prometheus 构建指标监控 +飞书告警

1 介绍 Prometheus Operator 为 Kubernetes 提供了对 Prometheus 机器相关监控组件的本地部署和管理方案&#xff0c;该项目的目的是为了简化和自动化基于 Prometheus 的监控栈配置&#xff0c;主要包括以下几个功能&#xff1a; Kubernetes 自定义资源&#xff1a;使用 Kube…

清华大学第五弹:《DeepSeek与AI幻觉》

作者&#xff1a;清华大学新闻与传播学院新媒体研究中心、人工智能学院&#xff08;新媒沈阳团队&#xff09; 时间&#xff1a;2025年2月 完整版下载地址&#xff1a;夸克网盘分享 一、AI幻觉的定义与分类 定义 学术定义&#xff1a;模型生成与事实不符、逻辑断裂或脱离上下…

鹰角基于 Flink + Paimon + Trino 构建湖仓一体化平台实践项目

摘要&#xff1a;本文整理自鹰角大数据开发工程师&#xff0c;Apache Hudi Contributor 朱正军老师在 Flink Forward Asia 2024 生产实践&#xff08;二&#xff09;专场中的分享。主要分为以下四个部分&#xff1a; 一、鹰角数据平台架构 二、数据湖选型 三、湖仓一体建设 四、…

deepin 下安装nvm(npm+node)

1、切换root用户&#xff0c;并更新系统 sudo su sudo apt update && apt upgrade -y 期间所有提示选择yes即可 2、切换回自己用户 su - fchsoft 3、安装git sudo apt install git -y 4、安装wget sudo apt install wget -y 5、安装nvm 创建文件夹 mkdir -p…

【JavaEE进阶】MyBatis通过注解实现增删改查

目录 &#x1f343;前言 &#x1f340;打印日志 &#x1f334;传递参数 &#x1f38b;增(Insert) &#x1f6a9;返回主键 &#x1f384;删(Delete) &#x1f332;改(Update) &#x1f333;查(Select) &#x1f6a9;起别名 &#x1f6a9;结果映射 &#x1f6a9;开启驼…

三、数据治理应用开发整体架构

1.数据治理应用开发整体架构概览 该架构图描绘了一个全面的数据治理应用开发平台&#xff0c;旨在为用户提供从数据调研、治理构建、资产管理到应用开发、运维监控等全生命周期的一体化服务。整体架构呈现出模块化、松耦合的特点&#xff0c;并强调低代码开发和业务中台能力。 …

C#项目05-猜数字多线程

本项目利用多线程&#xff0c;通过点击按钮猜数字&#xff0c; 知识点 线程 基本概念 进程:一组资源&#xff0c;构成一个正在运行的程序&#xff0c;这些资源包括地址空间、文件句柄以及程序启动需要的其他东西的载体。 线程:体现一个程序的真实执行情况&#xff0c; 线…

XiaoMi Mi5(gemini) 刷入Ubuntu Touch 16.04——安卓手机刷入Linux

最近在研究个人用的小服务器&#xff0c;期间也搞了一台某讯的盒子&#xff0c;s905的芯片&#xff0c;28G&#xff0c;刷入了Armbian&#xff0c;在自己本地当linux服务器用用挺方便的&#xff0c;但总感觉性能不太够。 然后灵机一动&#xff0c;手上还有几台旧的安卓手机&am…

Spring Security+JWT+Redis实现项目级前后端分离认证授权

1. 整体概述 权限管理包括用户身份认证和授权两部分&#xff0c;简称认证授权。对于需要访问控制到资源&#xff0c;用户首先经过身份认证&#xff0c;认证通过后用户具有该资源的访问权限方可访问。 1.1 认证概述 认证是确认用户身份的过程&#xff0c;确保用户是谁。 1.1.1 …

【Linux】:应用层协议 HTTP (超文本传输协议)

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 1. HTTP -- 概述 虽然我们说…

【ORB-SLAM3】鲁棒核函数的阈值设置

问题背景 阈值 δ \delta δ 是 Huber 鲁棒核函数的重要参数。首先给出结论&#xff0c;在ORB-SLAM系列中&#xff0c;该阈值选取的原则为&#xff1a; 单目情况下&#xff0c;根据95%置信水平下两自由度卡方检验的临界值&#xff0c; δ \delta δ 设置为 5.991 \sqrt{5.9…

零基础学QT、C++(六)制作桌面摄像头软件

目录 一、前言 二、Python项目包 三、C项目包 四、 项目说明 五、结语 章节汇总 一、前言 上一节&#xff0c;成功导入了OpenCV库 零基础学QT、C&#xff08;四&#xff09;QT程序打包-CSDN博客文章浏览阅读1.1k次&#xff0c;点赞29次&#xff0c;收藏23次。QT程序打包。将项…

银河麒麟系统安装mysql5.7【亲测可行】

一、安装环境 cpu&#xff1a;I5-10代&#xff1b; 主板&#xff1a;华硕&#xff1b; OS&#xff1a;银河麒麟V10&#xff08;SP1&#xff09;未激活 架构&#xff1a;Linux 5.10.0-9-generic x86_64 GNU/Linux mysql版本&#xff1a;mysql-5.7.34-linux-glibc2.12-x86_64.ta…

解耦的艺术_应用架构中的解耦

文章目录 Pre解耦的技术演化应用架构中的解耦小结 Pre 解耦的艺术_通过DPI依赖倒置实现解耦 解耦的艺术_通过中间层映射实现解耦 解耦的技术演化 技术的演化史&#xff0c;也是一部解耦的历史。从最初的面向对象编程&#xff08;OOP&#xff09;到Spring框架的依赖注入&…

Python采用DeepSeekR1本地部署+本地API接口实现简单对话

以下内容摘抄自 【Ai】— DeepSeek-r1 版本选择(超详细)https://blog.csdn.net/weixin_44205779/article/details/145479506 Ollama:零代码部署大模型,轻松玩转AIhttps://blog.csdn.net/scy799327210/article/details/145798396 大模型 ollama命令详解大全https://blog.…

记录 pycharm 无法识别提示导入已有的模块解决方案 No module named ‘xxx‘

在windows下&#xff0c;使用pycharm开发项目&#xff0c;每个项目都有自己独立的虚拟环境&#xff0c;有时候就会出现&#xff0c;在该项目中明明已经安装了某个模块&#xff0c;但是在写代码的时候就是导入不了&#xff0c;无法识别导入&#xff0c;在运行的时候却又是正常的…

uniapp 网络请求封装(uni.request 与 uView-Plus)

一、背景 在开发项目中&#xff0c;需要经常与后端服务器进行交互&#xff1b;为了提高开发效率和代码维护性&#xff0c;以及降低重复性代码&#xff0c;便对网络请求进行封装统一管理。 二、创建环境文件 2.1、根目录新建utils文件夹&#xff0c;utils文件夹内新建env.js文…