回顾历史
五大主流浏览器
| 浏览器 | 内核 |
|---|---|
| Internet Explorer | Trident |
| Chrome | Webkit Blink |
| Safari | Webkit |
| Firefox | Gecko |
| Opera | 最早是 Presto、后来是 Webkit、现在是 Blink 内核 |
| 360 浏览器、猎豹浏览器 | IE+Chrome 双内核 |
| 搜狗、遨游、QQ 浏览器 | Trident(兼容模式)+Webkit(高速模式) |
苹果自带浏览器是Safari,带你去旅行。Windows自带浏览器是Explorer,带你去探索。谷歌自带浏览器叫Chrome,化学元素铬,寓意多彩稳定。
浏览器的历史、JS 诞生的过程
1990 年,蒂姆·伯纳斯-李开发了一款真正意义上的浏览器World Wide Web,并将其移植到C语言上,改名为libwww或Nexus,主要用于浏览他人编写的网站。
1993 年,美国伊利诺伊大学NCSA的核心成员马克·安德森开发了Mosaic浏览器,这款浏览器的亮点是能够显示图片,是真正意义上的图形化浏览器。
1994 年,马克·安德森和吉姆·克拉克在硅图SGI公司成立了Mosaic Communications Corporation。由于Mosaic名称被伊利诺伊大学转让给Spyglass公司,马克·安德森将浏览器名称改为Netscape Communications Corporation。Netscape Navigator成为全球用户接受的浏览器,运营一直持续到 2003 年。
1996 年,微软收购了Spyglass,随后开发出了Internet Explorer 1.0。拥有自己的内核是非常困难且成本高昂的,微软选择购买别人的内核。微软发布了IE 3和JScript脚本语言,这种语言与现在的JavaScript功能相似,旨在实现网页的动态交互。
同年,网景公司的开发人员布兰登·艾奇基在Netscape Navigator的基础上开发出了LiveScript,即JavaScript的前身。然而,由于当时渲染和JS解析在同一个引擎中,性能低下且容易崩溃。
1996 年,Java开始获得知名度,网景公司与Sun公司商讨合作推广,LiveScript因此更名为JavaScript。
2001 年,IE6 XP发布,带来了JS引擎的诞生,内核分为JS引擎和渲染引擎,各个厂商开始重视浏览器渲染引擎的开发。
2003 年,Mozilla公司基于Netscape Navigator开源代码开发了Firefox,显示了开源对浏览器发展的重要影响。
2008 年,谷歌基于Webkit Blink开发了V8引擎,显著提升了JavaScript的执行性能,使得Node.js等独立于浏览器运行的应用成为可能,推动了渐进式Web App的发展。
2009 年,甲骨文收购了Sun公司,JavaScript的所有权归属甲骨文。
ECMA
European Computer Manufacturers Association(欧洲计算机制造联合会)是一个评估、开发和认可电信及计算机标准的组织。
ECMA-262
ECMA-262是一份标准,定义了ECMAScript。ECMAScript是脚本语言的规范,ES5和ES6等版本均基于此标准。
编程语言
计算机只能理解0和1,高级语言需要通过编译将源码转换为机器码。
编译型语言
编译型语言通过编译器将源码编译成可执行文件,适用于特定平台。编译后的程序执行速度较快,适合开发大型程序和复杂逻辑。然而,编译型语言的程序难以跨平台移植。
解释型语言
解释型语言通过解释器逐行解释执行源码,每次运行都需要重新解释。解释型语言无需针对不同系统平台进行移植,具有良好的跨平台特性,但执行速度较慢。Python是一门典型的解释型编程语言。
脚本语言
脚本语言通过脚本引擎进行解释执行,主要分为前端和后端两种。
前端脚本语言JavaScript运行在客户端,后端脚本语言PHP运行在服务器端。
JavaScript
JavaScript具有单线程特性,同一时间只能执行一个任务。然而,JS引擎通过轮转时间片模拟多线程,使得能够同时处理多个程序。具体过程如下:
任务 1 和任务 2 被切分成多个任务片段,随机排列这些片段组成队列,然后按照队列顺序依次送入JS进程。JS线程逐一执行这些任务片段,从而实现并发执行的效果。
ECMAScript涵盖语法、变量、关键字、保留字、值、原始类型、引用类型运算、对象、继承和函数等内容。DOM(Document Object Model)由 W3C 制定,而BOM(Browser Object Model)则没有统一规范。
变量
变量是用于存储数据的容器,方便后续使用。
// 变量声明
let variableA;
// 变量赋值
variableA = 3;
// 变量声明并赋值
let variableB = 3;
声明变量相当于拥有一个房子,赋值则是实际居住其中。
企业开发命名规范
变量命名需遵循以下规范:
- 不能以数字开头,可以用字母、下划线或
$开头。 - 变量名中可以包含字母、数字、下划线和
$。 - 不能使用关键字和保留字,如
if。 - 命名应尽可能语义化和结构化。
- 企业中
JavaScript调用通常采用JHeader、jsHeader、J-header等命名方式。 - 推荐使用小驼峰命名法,如
myEnglish。
优先级
| 运算符 | 描述 |
|---|---|
() [] . | 分组、数组下标、成员访问 |
new(带参数列表) | 创建新对象 |
++ -- ! ~ + - typeof void delete | 一元运算符、类型检测、删除操作 |
** | 指数运算 |
* / % | 乘法、除法、取余 |
+ - | 加法、减法、字符串连接 |
<< >> >>> | 位移运算 |
< <= > >= instanceof in | 比较运算、实例检查、属性检查 |
== != === !== | 相等运算、严格相等、不等运算、严格不等运算 |
& | 按位与 |
^ | 按位异或 |
| ` | ` |
&& | 逻辑与 |
| ` | |
?: | 条件(三元)运算 |
= += -= *= /= %= <<= >>= >>>= &= ^= ` | = **=` |
, | 逗号运算符 |
基本数据类型
JavaScript中有五种原始数据类型:number、string、boolean、undefined和null。JavaScript将整型和浮点型统一为数字类型,单引号和双引号内的内容均为字符串类型。JavaScript根据值推断数据类型,例如123为number,"abc"为string,因此常被称为弱类型语言。
动态语言属于脚本语言、解释型语言和弱类型语言。相对地,静态语言属于编译型语言和强类型语言。
非弱类型语言在编程时根据声明的数据类型来定义变量类型。
| undefined | null |
|---|---|
| 未被定义 | 空值,用于初始化组件或函数 |
引用值
JavaScript中的引用值包括Object、Array、Function、Date和RegExp等。
以Array为例:
let numberArray = [1, 2, 3, 4];
numberArray.push(5);
document.write(numberArray);
栈空间(先进后出)

当重新给variableA赋值时,variableA会重新开辟一块空间存放新值,原始值保持不变,对应的名称恢复。
堆空间(存储引用类型的内容)
let primaryArray = [1, 2, 3, 4];
let secondaryArray = primaryArray;
secondaryArray.push(5);
document.write(secondaryArray);
引用值的指针存在栈内存中。

当重新给primaryArray赋值时,

栈和指针



链接
请参考相关资料了解更多信息:MDN Web 文档
掌握前端历史和计算机的基础知识,是学好前端的先决条件,要尊重历史,常怀感恩之心,才能走得更远。