JavaScript发展历史与JavaScript的版本发展
JavaScript是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。它最初由Netscape公司的Brendan Eich设计,并于1995年在网景导航者浏览器上首次实现。由于Netscape与Sun合作,并希望其外观与Java相似,因此被命名为JavaScript。但实际上,JavaScript的语法风格与Self及Scheme更为接近。
JavaScript是一种基于原型编程、多范式的动态脚本语言,支持面向对象、命令式、声明式以及函数式编程范式。作为一种解释型脚本编写语言。
JavaScript具有简单性、安全性、动态性和跨平台性等特点。它包含类型、运算符、标准内置对象和方法,其语法来源于Java和C,但两者之间在实质上存在较大差异。例如,JavaScript并不支持类,类的概念在JavaScript中通过对象原型得到延续。同时,JavaScript中的函数也是对象,能够像其他对象一样被传递。
JavaScript的主要作用体现在交互式操作、表单验证、网页特效、Web游戏以及服务器脚本开发等多个方面。
此外,JavaScript还通过DOM(文档对象模型)和BOM(浏览器对象模型)提供了操作网页元素和浏览器窗口等功能。
随着JavaScript的不断发展,其标准也在不断更新和完善。ECMAScript是JavaScript的核心标准,由ECMA(欧洲计算机制造商协会)制定。
TC39是负责ECMAScript标准制定和发展的技术委员会,通过公开的提案流程推动新特性的添加和现有特性的改进。至今,ECMAScript已经发布了多个版本,最新的版本是ECMAScript 2023(通常被称为ES13)。
总的来说,JavaScript是一种功能强大且灵活的编程语言,广泛应用于Web开发和各种非浏览器环境中。通过不断的发展和更新,JavaScript将继续推动Web技术的创新和进步。
一、JavaScript发展历史
JavaScript的发展历史可以追溯到上世纪90年代初期,它随着互联网和万维网的兴起而逐渐崭露头角。以下是JavaScript的主要发展里程碑:
-
起源与命名:
- 1995年,布兰登·艾奇(Brendan Eich)在网景公司(Netscape)工作时,为了满足在其Navigator浏览器中嵌入一种处理网页上用户交互的脚本语言的需求,创造了JavaScript。最初,这种语言被命名为LiveScript。
- 为了利用当时火热的Java的知名度,Netscape在发布时将LiveScript更名为JavaScript。
-
首次亮相与标准化:
- JavaScript的第一版在Netscape Navigator 2.0浏览器中首次亮相。
- 由于JavaScript的迅速成功和广泛应用,欧洲计算机制造商协会(ECMA)于1997年成立了一个名为ECMA-262的委员会,负责制定JavaScript的标准规范。自那时起,ECMAScript经历了多个版本的更新和改进,以不断适应新的编程需求。
-
多版本并存与标准化努力:
- 微软在其Internet Explorer 3中加入了名为JScript的JavaScript实现,主要是为了避开与NetScape有关的授权问题。
- 这一时期,JavaScript出现了多个不同的版本,包括NetScape Navigator中的JavaScript、Internet Explorer中的JScript以及ScriptEase中的CEnvi。由于当时没有统一的标准规定JavaScript的语法和特性,这些版本之间存在兼容性问题。
-
Web技术的崛起与JavaScript的普及:
- 1990年,欧洲核能研究所(CERN)的科学家Tim Berners-Lee发明了万维网(World Wide Web),使得人们可以在互联网上浏览网页文件。
- 1992年,美国国家超级电脑应用中心(NCSA)开发了人类历史上第一个浏览器Mosaic,为网页提供了图形界面的浏览方式。
- 1994年,NCSA的程序员与风投家成立了Mosaic通信公司(后更名为Netscape),并开发了面向普通用户的新一代浏览器Netscape Navigator。随着浏览器的普及和网页交互需求的增加,JavaScript逐渐成为了Web开发中的关键语言。
-
现代JavaScript与框架的兴起:
- 进入21世纪后,JavaScript继续发展和演进,不仅用于处理简单的用户交互,还涉及到更复杂的前端开发任务,如单页面应用(SPA)、异步编程、动画效果等。
- 为了提高开发效率和代码质量,出现了许多JavaScript框架和库,如React、Angular、Vue.js等。这些框架和库提供了丰富的功能和工具,使得开发者能够更高效地构建复杂的Web应用程序。
总的来说,JavaScript的发展历史是一部不断演进和适应新技术需求的历程。从最初的简单脚本语言到现在功能强大的前端开发工具,JavaScript已经成为了Web开发中不可或缺的一部分。
二、JavaScript版本发展
JavaScript语言经历了多个阶段的发展,每个版本都带来了不同的特性和改进。以下是对ES6之前各个版本的功能简述:
-
ES1(1997年):
- 奠定了JavaScript语言的基础语法和特性,包括变量、数据类型、控制流语句等。
-
ES2(1998年):
- 在ES1的基础上进行了小的改进和修复,可能涉及语法上的微调或对某些特性的增强。
-
ES3(1999年):
- 为JavaScript引入了正则表达式的支持,使文本处理更加灵活和强大。
- 添加了
try-catch异常处理机制,提高了错误处理的能力。 - 对字符处理、数值输出等进行了改进和优化
-
ES4:
- 原本计划中的ES4并未成功发布。这主要是因为关于语言的复杂性和设计方向出现了分歧,导致社区对于ES4的接受度不高。因此,该版本最终并未被广泛实现和采用。
-
ES5(2009年):
- 提供了严格模式(
"use strict"),有助于编写更安全、更可预测的代码。 - 引入了
JSON对象,方便解析和生成JSON数据。 - 为
Array和String等内置对象增加了新方法,如Array.prototype.indexOf()、Array.prototype.forEach()和String.prototype.trim()等。 - 增强了对象属性的定义和访问控制,如getter和setter。
- 提供了严格模式(
-
ES6(ECMAScript 2015):
- 变量 :新增了
let和const关键字,提供了块级作用域。 - 箭头函数:引入了更简洁的函数语法。
- 数组的方法:如
map、filter、reduce等,使得数组操作更为方便。 - 解构赋值:允许从数组或对象中提取数据到不同的变量中。
- 模板字符串:提供了更方便的字符串插值功能。
- 模块:虽然大部分浏览器在ES6发布时并不直接支持,但模块化是ES6的一个重要特性,允许通过
import和export语句进行代码的模块化组织。 - 面向对象:引入了
class关键字,作为构造函数的更简洁的语法糖。 - Promise:用于处理异步操作,提供了一种更优雅的方式来处理回调地狱问题。
- 变量 :新增了
-
ES7(ECMAScript 2016):
- 数组方法 :
Array.prototype.includes()用于检查数组是否包含特定值。 - 对象方法 :
Object.values()和Object.entries()用于获取对象的值或键值对。
- 数组方法 :
-
ES8(ECMAScript 2017):
- 异步函数:通过
async/await提供了更直观的异步编程模型。 - 对象扩展运算符:允许在对象之间复制属性。
- 共享内存和原子操作:为多线程编程提供了基础。
- 异步函数:通过
-
ES9(ECMAScript 2018):
- 正则表达式改进**:包括后行断言和命名捕获组等。
- Promise.finally():不论Promise是成功还是失败,都会执行finally中的代码。
- Rest/Spread 属性:允许在对象字面量中使用rest和spread语法。
-
ES10(ECMAScript 2019):
- 大整数:引入了
BigInt类型,用于表示任意大小的整数。 - 可选链操作符:允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。
- 空值合并操作符:当左侧的操作数为
null或者undefined时,它返回其右侧的操作数,否则返回左侧的操作数。
- ES11(ECMAScript 2020):
- Nullish 合并操作符:当左侧的表达式是
null或者undefined时,它会返回其右侧的操作数,否则返回左侧的操作数。 - Promise.allSettled():该方法接受一个Promise对象的数组作为参数,只有当数组里所有Promise对象都返回结果,或者都变为拒绝状态时,返回的Promise对象才会解析完成。
- 新的字符串方法:
String.prototype.matchAll()用于获取所有匹配正则表达式的结果。
- ES12(ECMAScript 2021):
- 逻辑赋值操作符:如
&&=和||=,允许在赋值的同时进行逻辑运算。 - 数字分隔符:在数字字面量中使用下划线作为分隔符,提高可读性。
- Private fields(私有字段):在类中使用
#前缀定义私有字段。
- ES13:
关于ES13的确切功能,由于它是较新的版本,具体细节可能还在讨论和制定中。但根据现有信息,预计ES13会新增约10个新特性。这些特性可能会涵盖性能优化、语法糖、新的API或工具等,以进一步提高JavaScript的开发效率和代码质量。
请注意,由于ECMAScript规范不断更新和发展,上述功能可能会有所变化或增加。为了获取最准确和最新的信息,建议查阅ECMAScript的官方文档或相关资源。
相关文章:
JavaScript发展历史与JavaScript的版本发展
JavaScript是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。它最初由Netscape公司的Brendan Eich设计,并于1995年在网景导航者浏览器上首次实现。由于Netscape与Sun合作,并希望其外观与Java相似,因此被命名为JavaScrip…...
零基础如何系统自学Python
零基础系统自学Python 学习前的准备 明确学习目标 Python 一共有两大版本,即 Python2 以及 Python3,Python2 已停止维护,强烈建议直接上手 Python3。Python 可以说是无所不能,主要有以下几大方向,建议选择自己感兴趣…...
华为OD机试 - 字符串统计(Java 2024 C卷 100分)
目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题&a…...
LeetCode-数组-前缀和-中等难度
前缀和 前缀和是一种利用预处理的方式来减少整体实现复杂度的方法。 基本定理 假设原数列A为:[1,2,3,4,5],与之对应的前缀和数列P则为:[1,3,6,10,15] 前缀和数列的第一项等于原数列的第一项,从第二项开始前缀和数列每一项计算…...
【程序人生】探索2024年AI辅助研发趋势
目录标题 探索2024年AI辅助研发趋势一、AI在编码中的应用智能代码生成助力开发错误检测与修复的即时反馈性能优化的智能建议 二、AI驱动的自动化工具三、AI与团队协作四、未来展望结语 探索2024年AI辅助研发趋势 随着人工智能技术的迅速发展,AI在各个领域的应用正日…...
集合框架(一)Collection
学习过了ArrayList,知道集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。 为了满足不同的业务场景需求Java还提供了很多不同特点的集合给我们选择。 集合体系结构 Collection是一个接口&a…...
Android 性能优化--APK加固(2)加密
文章目录 字符串加密图片加密如何避免应用被重新签名分发APK 加壳的方案简析DEX加密原理及实现 本文首发地址:https://h89.cn/archives/212.html 最新更新地址:https://gitee.com/chenjim/chenjimblog 通过 前文 介绍,我们知晓了如何使用代码…...
Linux环境下使用interrupt方式操作UART
目录 概述 1 Linux环境下UART设备 2 轮询方式操作UART功能实现 2.1 打开串口函数:usr_serial_open 2.2 关闭串口函数: usr_serial_close 2.3 发送数据函数: usr_serial_sendbytes 2.4 接收数据函数: usr_serial_readinterr…...
修改Android打包apk的名字和目录
app打包生成apk后通常需要进行备份,但是要区分好哪个apk是什么版本的、什么时候打包的,以方便以后区分使用。 最开始的想法是把版本号、创建时间这些加在apk文件名上即可,但是公司要求apk使用一个固定的名称,那我怎么保存版本号信…...
管理 PostgreSQL 中配置参数的各种方法
管理 PostgreSQL 中配置参数的各种方法 1. 概述 PostgreSQL提供了一个配置文件 postgresql.conf 让用户自定义参数。您可能需要更改一些参数来调整性能或在工作环境中部署 PostgreSQL 服务器。在这篇博文中,我们将探索管理这些参数的不同方法。 2. 以不同方式管理…...
Linux命令-continue命令(结束本次循环,继续执行下一个for,while或until循环。)
概要 continue [n]主要用途 结束本次循环,继续执行下一个for,while或until循环;可指定从第几层循环继续执行。 参数 n(可选):大于等于1的整数,用于指定从第几层循环继续执行。 返回值 返回…...
智能部署之巅:Amazon SageMaker 引领机器学习革新
本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道。 (全球 TMT 2023年12月6日讯)亚马逊云科技在 2023 re:Invent 全…...
国内哪个工具可以平替chatgpt?国内有哪些比较好用的大模型gpt?
我自己试用了很多的平台,发现三个比较好的大模型平台,对普通用户也比较的友好的,而且返回内容相对来说,正确率更高的,并且相关场景插件比较丰富的国内厂商。 本文说的,是我自己觉得的,比较有主观…...
python如何打包py文件为exe
要将Python程序打包为可执行文件(.exe),您可以使用一些第三方工具。以下是两个常用的工具:PyInstaller和cx_Freeze。 使用PyInstaller PyInstaller是一个流行的Python打包工具,可以将Python程序及其所有依赖项打包为…...
yolov9网络结构图
文章目录 配置文件主干分支backbone预测头headyolov9网络结构图 系列文章目录 论文链接:👿 YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information代码链接:👿 https://github.com/WongKinYiu/yolov9…...
Spark 核心API
核心 API spark core API 指的是 spark 预定义好的算子。无论是 spark streaming 或者 Spark SQL 都是基于这些最基础的 API 构建起来的。理解这些核心 API 也是写出高效 Spark 代码的基础。 Transformation 转化类的算子是最多的,学会使用这些算子就应付多数的数…...
OpenLayers线性渐变和中心渐变(径向渐变)
目录 1.前言2.添加一个面要素3.线性渐变3.1 第一个注意点3.2 第二个注意点 4.中心渐变(径向渐变)5.总结 1.前言 OpenLayers官网有整个图层的渐变示例,但是没有单个要素的渐变示例,我们这里来补充一下。OpenLayers中的渐变是通过fi…...
[210. 课程表 II] 拓扑排序模板(DFS+BFS)
Problem: 210. 课程表 II 文章目录 思路解题方法Code 思路 本题是经典拓扑排序模板,通过DFS和BFS两种方式进行实现。 解题方法 DFS DFS方法的重点在于如何标记节点状态,初做题者如果只用未访问和已访问两种状态很容易陷入死结。正确的做法是使用三种状…...
我的第一个python web 网站
# -*- coding: utf-8 -*-import http.server import socketserver from datetime import datetimePORT 8000import sys# ...class MyHandler(http.server.SimpleHTTPRequestHandler):def do_GET(self):if self.path /:# 如果路径是根路径,返回页面内容self.send_r…...
产品展示型wordpress外贸网站模板
孕婴产品wordpress外贸网站模板 吸奶器、待产包、孕妇枕头、护理垫、纸尿裤、孕妇装、孕婴产品wordpress外贸网站模板。 https://www.jianzhanpress.com/?p4112 床品毛巾wordpress独立站模板 床单、被套、毛巾、抱枕、靠垫、围巾、布艺、枕头、乳胶枕、四件套、浴巾wordpre…...
松下Panasonic伺服调试软件 适配MINAS-A/A3/A4/B/E/S及MDDA/MH...
松下Panasonic 伺服调试 软件 支持MINAS-A A3 A4 B E S 英文版 MDDA、MHDA、MSMA、MSDA、MDMA、可以修改参数、JOG点动调试、参数拷贝、复制等 松下 伺服 软件刚拿到台新拆箱的MHDA-MA3A1A伺服驱动器?或者翻出实验室积灰好几年的MSMA电机搭MDDA A1板子练手ÿ…...
2026做GEO,豆包、DeepSeek、元宝都爱引用哪些媒体?这份清单收好了!
你是不是也发现了这个 “诡异” 的现象?过去,我们拼命讨好搜索引擎的爬虫,优化关键词密度、买外链,只为排在百度搜索结果的第一页。而现在,用户变了。他们不再在搜索框里试错关键词,而是直接打开豆包、Deep…...
新手入门指南:基于快马平台构建vmware17交互式安装教学应用
新手入门指南:基于快马平台构建VMware17交互式安装教学应用 作为一个刚接触虚拟化技术的新手,第一次安装VMware Workstation 17时可能会遇到不少困惑。从下载安装包到最终配置完成,整个过程涉及多个步骤,每个环节都可能出现各种问…...
嵌入式软件框架设计:从基础到实战
1. 嵌入式软件框架设计基础作为一名在嵌入式领域摸爬滚打多年的工程师,我深刻体会到框架设计对项目成败的决定性影响。嵌入式系统与通用计算机系统最大的区别在于其资源受限性和实时性要求,这就决定了我们不能简单套用桌面开发的思维模式。程序框架本质上…...
探索偏心轮飞剪的 Codesys 程序奥秘:基于偏心轮加滑块机构
偏心轮 飞剪 电子凸轮 codesys程序源码 适用于偏心轮加滑块机构 在自动化控制领域,偏心轮飞剪系统凭借其独特的运动特性和高效的切割能力,在众多生产场景中发挥着关键作用。今天咱们就深入探讨基于偏心轮加滑块机构的偏心轮飞剪的 Codesys 程序源码&…...
小型纯电动汽车轮毂电机及大角度转向系统的数字化设计【含catia、solidworks、CAD图纸、答辩PPT、说明书】
小型纯电动汽车轮毂电机与大角度转向系统的数字化设计,是新能源汽车领域的关键技术突破方向。轮毂电机通过将驱动装置集成于车轮内部,实现了动力传递路径的简化与能量利用效率的提升,其分布式驱动特性使车辆具备更灵活的扭矩分配能力…...
WarcraftHelper:魔兽争霸III现代化增强工具全面指南
WarcraftHelper:魔兽争霸III现代化增强工具全面指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 如何让经典游戏适配现代硬件环境&…...
Redis 相关命令详解及其原理
Redis 相关命令详解及其原理 文章目录Redis 相关命令详解及其原理1. Redis 简介2. Redis 安装2.1 包管理器安装2.2 源码编译安装2.4 验证安装3. Redis 基础原理3.1 单线程模型3.2 底层数据结构概述4. 数据类型详解4.1 String(字符串)底层存储结构常用命令…...
Hackintool:面向黑苹果爱好者的硬件配置诊断与优化工具
Hackintool:面向黑苹果爱好者的硬件配置诊断与优化工具 【免费下载链接】Hackintool The Swiss army knife of vanilla Hackintoshing 项目地址: https://gitcode.com/gh_mirrors/ha/Hackintool 黑苹果配置过程中,硬件兼容性问题常常成为用户最头…...
隐私保护×效率提升:开源OCR工具如何重构3大行业文本处理流程
隐私保护效率提升:开源OCR工具如何重构3大行业文本处理流程 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多…...
