文章目录
JavaScript简单介绍
JavaScript发展历史:
- 由布兰登·艾奇在1995年用时10天发明。由于他最早在网景公司工作,因此网景公司最初将其命名为
LiveScript,后来在与Sun公司合作之后将其改名为JavaScript,简称为JS。 JavaScript本身和Java语言并没有任何关系。
JavaScript是什么:
JavaScript是世界上最流行的语言之一,是一种运行在客户端的脚本语言。- 之所以说该语言是脚本语言,是因为该语言不需要进行编译,在运行过程中由JS解释器(也被称为JavaScript引擎)逐行来进行解释然后执行。
 - 现在也可以基于
Node.js技术来进行服务器端的编程。 
JavaScript有什么用:表单动态检验、网页特效制作、服务端开发(基于Node.js)、桌面程序开发、APP开发、物联网中的控制硬件开发(基于Ruff)、游戏开发(基于cocos2d-js)等各种任务。
浏览器如何执行JS代码:浏览器可以分为两部分,分别是渲染引擎和JS引擎,其中JS引擎就用来执行JS代码。
- 渲染引擎:用来解析HTML和CSS代码,也被称为浏览器内核,例如
Blink和Webkit等等。 - JS引擎:也就是JS解释器,用来读取网页中的JS代码,对其处理后运行,例如
V8等。V8号称是最快的JS引擎。 
JS的组成:JS可以分为ECMAScript、DOM和BOM三部分。
- ECMAScript: 
  
- 由原欧洲计算机制造协会(
ECMA)进行标准化的一门编程语言,这种语言在万维网上应用广泛,往往被称为JavaScript或Jscript(微软公司模仿JS发明的语言),但是实际后面两种语言都是ECMAScript的实现和扩展。 - ECMA规定了JS的编程语法和基础核心知识,是所有浏览器厂商共同遵守的一套JS语法工业标准。
 
 - 由原欧洲计算机制造协会(
 - DOM:全称为文档对象模型,是W3C组织推荐的处理可扩展标记语言的标准编程接口,通过DOM提供的接口可以对网页中的各种元素进行操作(例如设置大小、颜色和位置等)。在后续API的学习笔记中会涉及,此处暂时不进行详细解释。
 - BOM:全称为浏览器对象模型,提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。通过BOM可以操作浏览器窗口,例如弹出对话框、控制浏览器跳转、获取分辨率等。
 
JS的书写位置:JS的书写位置可以分为行内式、内嵌式和外部式。
- 行内式: 
  
- 行内式的语法:直接写到元素的内部,例如
<input type="button" value="test" onclick="alert('hello world')">。 - 行内式的特点:适合于单行或少量JS代码,但是可读性较差,引号使用容易出错(尤其是引号多层嵌套时),仅仅在特殊情况下使用。
 - 行内式的注意事项:在HTML代码中推荐使用双引号,在JS中推荐使用单引号。
 
 - 行内式的语法:直接写到元素的内部,例如
 - 内嵌式: 
  
- 内嵌式的语法:在网页的HTML源代码的
<head>标签中,增加一对<script></script>标签(一般是放在内嵌式CSS样式标签<style></style>的下面),在这一对标签中写入JS代码。 - 内嵌式的特点:是学习JS时常用的一种方式。
 
 - 内嵌式的语法:在网页的HTML源代码的
 - 外部式: 
  
- 外部式的语法:新建一个后缀名为
.js的文件,并直接在其中写入JS代码。接着,在HTML源代码中引入该文件,引入语法为:<script src="JS文件路径"></script>。 - 外部式的特点:利于HTML页面代码结构化,可以将网页的结构和样式与行为分离开,并且有利于文件级的代码复用,适用于JS代码量很大的情况。
 
 - 外部式的语法:新建一个后缀名为
 
JavaScript中的注释和输入输出语句
JS中的注释:注释可以分为单行注释和多行注释两种。
- 单行注释:在一行代码的前面加上 
//即可。在VsCode中可以使用Ctrl + /进行单行注释。 - 多行注释:在注释的开头使用 
/*,在注释的结尾加上*/。在VsCode中可以使用Shift + Alt + A进行多行注释。 
JS中的输入输出语句:
- 输入函数prompt:语法为
prompt("提示字符串"),该函数可以在浏览器中弹出一个输入框,获取用户的输入,获取的输入类型是一个字符串。 - 输出函数alert:语法为
alert("输出的字符串"),该函数可以在浏览器中以弹出警示框的形式给用户一个输出反馈。 - 控制台输出函数console.log:语法为
console.log("输出的字符串"),该函数可以在控制台中进行输出,用于程序调试等过程。在浏览器中可以通过按下F12键打开控制台,查看输出结果。 
JavaScript中的变量
变量的使用方式:JS中变量的使用也需要先进行声明,然后才能赋值。
- 变量的声明:
var 变量名;。var是JS中的一个专门用来声明变量的关键字。变量的声明过程中也可以对变量进行初始化。另外,还可以一次性声明多个变量,多个变量之间使用英文逗号分隔。 - 变量的赋值:
变量名 = 变量值。对于没有进行过赋值的变量,其默认值是undefined。 - 允许不声明直接使用变量:JS中其实也允许不声明只赋值后直接使用变量,但是这种方式不推荐。
 - 变量名命名规则:由大小写字母、数字、下划线和美元符号组成。变量名区分大小写,不能以数字开头,不能是关键字。
 
JavaScript中的数据类型
JavaScript是一种弱类型语言(也被称为动态语言),意味着声明变量时无需指定类型,类型会在程序的运行过程中被自动确定。
- JS数据类型分类:可以分为简单数据类型和复杂数据类型两类。简单数据类型包括
Number、String、Boolean、Undefined、Null等,复杂数据类型主要是对象。- Number:数字型,包含整型值和浮点型值,默认值是
0。- 不同的进制:可以加前缀
0表示八进制整数,加前缀0x表示十六进制整数。 - 最大值和最小值:
Number.MAX和Number.MIN分别表示该类型的最大表示数字和最小表示数字。 - 无穷大和无穷小:常量
Infinity和-Infinity表示无穷大和无穷小。 - 非数值:常量
NaN用于表示非数值。 
 - 不同的进制:可以加前缀
 - String:字符串型,需要使用一对引号进行表示,默认值是空字符串。 
    
- 引号的选择:在JS中为了与HTML和CSS代码进行区分,推荐使用单引号来表示字符串。
 - 引号的嵌套:如果一个字符串中本身还有引号,则要和表示字符串的引号不同,即表示字符串的引号是单引号时,字符串内部的引号应该采用双引号。
 - 转义字符:JS中常用的转义符如下:
\n表示换行、\b表示单个空格、\\表示单斜杠、\t表示缩进。重点记忆换行和缩进即可。 - 字符串的长度获取:可以通过字符串的
length属性获取字符串的长度。 - 字符串的拼接:可以通过 
+运算符来拼接两个字符串。如果和字符串拼接的数据的类型不是字符串,则会自动将其转换为字符串。 
 - Boolean:布尔值类型,
true和false分别等价于1和0,默认值是false。 - Undefined:表示声明了一个变量但是没有对该变量进行赋值。进行字符串相加时也会变成字符串"
undefined",和数值运算结果是NaN。 - Null:表示空变量。可以使用
isNaN(变量名)的方式来检测一个变量是否是空的,返回值是一个布尔值。 
 - Number:数字型,包含整型值和浮点型值,默认值是
 - 获取JS变量的数据类型:使用
typeof 变量名的方式可以获取一个变量的数据类型,其中typeof是JS中的一个关键字。 - JS中的数据类型转换: 
  
- 将数据转换为字符串: 
    
- 使用该变量的toString方法:
变量名.toString()。 - 使用String函数进行强制转换:
String(变量名)。 - 与一个空字符串拼接:
"" + 变量名。这是一种最常用的方法,是一种隐式转换的方法。 
 - 使用该变量的toString方法:
 - 将数据转换为数字:前两种方法是重点。 
    
- 使用parseInt(string)函数:该函数可以将一个字符串转换为整型数字。这个函数会从字符串的首字符开始解析,直到找到第一个不是数字的字符为止。
 - 使用parseFloat(string)函数:该函数可以将一个字符串转换为浮点型数字。该函数也会从字符串的首字符开始解析,直到找到第一个不是浮点数组成的字符为止。
 - 使用Number()函数强制转换:将一个数据强制转换为数字类型。
 - 使用算术运算符进行隐式转换:例如,可以通过一个字符串 + 0 或 - 0 来将该字符串隐式转换为数值类型。
 
 - 将数据转换为布尔值:
Boolean()函数可以将其他的数据类型转换为布尔值。代表空、否定的值,例如空字符串、0、NaN、NULL和undefined转换为false,其他的值都会被转换为true。 
 - 将数据转换为字符串: 
    
 
JavaScript中的运算符
JS中的运算符使用和其他语言中的运算符使用大同小异,下面只介绍一些简单的注意事项:
- 浮点数运算精度问题:浮点数的最高精度是17位小数,但是其计算的精确度远不如整数,因此浮点数之间无法进行直接的相等判定。
 - 全等的判定:JS中有
===和!==符号进行全等判定,全等是指两个变量的数据类型和值都完全相同。 
JavaScript中的流程控制
- if-else if-else语句:与C++中的
if系列语句的语法完全相同。 - 三元表达式:JS中也支持与其他语言中相同的三元表达式
?:。 - switch语句:与C++中的
switch语句的使用语法完全相同,但是进行case匹配时不是进行相等判定,而是进行全等判定。 - for循环语句:和C++中的
for循环语句的语法完全相同。 - while循环语句:和C++中的
while循环语句的语法完全相同。 - do-while循环语句:和C++中的
do-while循环的语法完全相同。 - break和continue关键字:和其他编程语言中的这两个关键字的作用完全相同。
 
JavaScript中的数组
数组的创建:
- 使用new关键字创建:
var 数组名 = new Array();。 - 使用数组字面量创建数组:
var 数组名 = [元素1, 元素2, ....];。 
数组中元素的数据类型:数组中的元素可以是不同的数据类型。
数组的长度获取:数组的length属性即表示数组中的元素个数。
向数组中添加元素:
- 修改数组的
length属性来进行扩容(是的,JS中数组的长度属性是可以读写的),多出来的空位置将会被自动赋值undefined。 - 直接通过索引号来增加数组元素。例如对于一个原本长度为
3的数组arr,可以写入arr[3]="test",来向数组中添加一个新元素。 









