一.引言
1.我们学习JS的目的就是:
完成一个Web网页的开发
2.前面就有讲过:
HTML相当于人的骨架,CSS相当于给人穿上衣服,起装饰作用,JS相当于是让人动起来,有了灵魂。
3.浏览器分成渲染引擎+JS引擎
- 渲染引擎:解析html+CSS,俗称"内核"
- JS引擎:也就是JS解释器,典型的就是Chorme中内置的v8
JS引擎逐行读取JS代码内容,然后解析成二进制指令,再执行
二.JS的组成
ECMASript(简称ES):即JS的语法
DOM:页面文档对象模型,对页面中的元素进行操作
BOM:浏览器对象模型,对浏览器窗口进行操作
三.JS的书写形式
1.行内式
直接将JS代码嵌入到html元素内部

图1
解释图1:后面的onclick的意思是 点击之后触发一个点击事件,然后就会执行代码
使用:


注意:JS中字符串常量可以使用单引号或双引号表示。
++HTML中推荐使用双引号,JS中推荐使用++++单引号++
2.内嵌式
即JS的代码是写在一个script代码当中


ctrl+s保存之后,浏览器中:

3.外部式
即:写到单独的.js文件中,然后++通过script的src属性引入++

图2
解释图2:
首先是在.js文件中写第2行内容,然后在.html文件中通过script的src属性将文件(即.js文件)引入进来,图2中src后面的hello.js就是js文件的文件路径



注意:
这种情况下script标签中间不能写代码,必须空着(写了代码也不会执行)
适合代码多的情况
++目前最为常见的写法是第2种和第3种,推荐第3种写法++
四.定义变量
创建变量(变量定义/变量声明/变量初始化)

++1.通过var进行一个变量的创建!++同样也是写在script里面!
- var是JS中的关键字,表示这是一个变量
- "=" 这个符号,在JS中表示"赋值",并且建议这两个符号之间有一个空格
- 每个语句最后带有一个分号
- 初始化的值如果是字符串,建议用单引号或者双引号引起来
- JS中定义一个变量的时候不需要对这个变量去指定类型
运用:

黄框部分是通过console.log(name)将name打印出来!即:

2.++通过let来进行一个变量的定义++,也是在script标签中


那么var和let这两种有什么区别呢?更推荐适用哪种?
建议后续定义变量使用let,因为let比var出现的晚,这就意味着定义变量的时候的一些缺陷,如果使用let定义变量,此时变量的生命周期,作用域,基本和JAVA类似的
五.动态类型静态类型强类型弱类型
知道了变量如何定义还不够,因为在JS里面,所有的变量都是个++动态类型变量++ ,而且所有的变量又属于是个++弱类型++
5.1什么是弱类型,什么又是强类型
- 强类型变量意味着不同的类型之间变量进行赋值的时候,需要进行一定的手段(eg.强制类型转换)
- 弱类型变量在不同类型之间进行赋值的时候,可以直接赋值!
那么JS里面的变量为什么是弱类型呢?


通过上图代码的赋值后,可以看到浏览器中不但没有报错,还成功赋值了
所以说明:++JS是一种弱类型语言,它定义的变量也就是弱类型变量++
什么又是动态类型变量什么又是静态类型变量呢?
5.2什么是动态类型,什么又是静态类型
- 动态类型意味着代码在执行过程中,变量类型可以随时发生变化
- 静态类型意味着变量定义的时候是什么类型,在运行过程中就是什么类型
那么JS为什么是动态类型变量呢?


由此可证明,JS是动态类型变量
六.变量类型_数字类型
6.1 JS中内置的几种类型
- number:数字,在JS中不区分整数和小数,统一使用"数字类型"来表示
- boolean:true真,false假
- string:字符串类型
- undefined:只有唯一的值,而undefined. 表示未定义的值
- null:只有唯一的值null,而null. 表示空值




6.2 特殊的数字值
- Infinity:无穷大,大于任何数字,表示数字已经超过了JS能表示的范围
- -Infinity:负无穷大,小于任何数字,表示数字已经超过了JS能表示的范围
- NaN:表示当前的结果不是一个数字
6.2.1 Infinity:无穷大

按理来说第17行应该报错,但是浏览器中的结果如下所示:(显示Infinity)

6.2.2 -Infinity:无穷小
负无穷大即无穷小


6.2.3 NaN 非数字


七JS中内置的数字类型
7.1string类型
7.1.1
如果字符串里面还有字符串,该怎么写?
可以通过使用单双引号交替使用到方法!

即:可以在单引号内包含双引号,也可以在双引号内包含单引号,以此来做区分

这里注意:13和14行都用于打印内容
只不过13行的console.log()是用于在浏览器的开发者工具控制台或终端里输出信息!
而14行,你只需要在括号里传入要显示的内容即可,就会显示在屏幕上!
所以,如果想给用户显示提示信息,就使用alert,如果是在开发过程中进行调试,查看代码执行过程中的数据内容,使用console.log()即可

如果是:


7.1.2字符串长度和字符串拼接
求长度,使用string的length属性即可
字符串拼接,使用+即可


++注意点:++
要区分好相加的变量到底是字符串还是数字

上图代码中18行是数字相加,19行是字符串相加,得到的结果是不一样的,如下图:

7.2boolean布尔类型
boolean在参与运算的时候,被当做1和0来看待


由此可说明,++当a = true的时候,代表数值是1,类型是boolean,但是当给a加上1后,它的类型是number++
当然,false也是一样的道理
7.3. undefined 未定义数据类型
这个undefined意味着什么?意味着只是给一个变量定义了,但是并没有给它初始化
- undefined和字符串进行相加,结果是进行字符串拼接
- undefined和数字进行相加,结果为NaN


7.4null类型
表示当前变量是一个空值
注意这里与undefined作区分,undefined是只是定义,但未给数值对其进行初始化,而null是被初始化了的,被赋值了的,只不过这个值是个空值


八.运算符
这里着重讲解:
- ==比较的是变量的内容
- ===比较的是内容+数据类型


如果只是比较内容,那结果就是true,如果是既比较内容,又比较类型,那就是false
九.JS里面的条件语句
9.1.1 if语句



这里的++prompt语句++的作用是弹出一个文本输入框的对话框,让用户输入信息
9.1.2三元表达式

条件为真,则结果是表达式1,否则为表达式2


9.2 switch case语句



注意这里的这个num是string类型,所以说得先强制类型转换。那如何转换?
通过使用parseInt(num)
JS中的强制类型转换
- Number() 将各种类型的值转换成数值
- parseInt() 将字符串转换成整数
- parsefloat()将字符串转换成浮点数
- String()将其他类型的值转换成字符串


十.循环语句
10.1 while循环

10.2 continue循环
表示结束它这条语句之后的循环体内语句,直接进入下一条循环
10.3 break
表示结束掉整个循环
10.4 for循环
写100~200之间第1个3的倍数的数


十一.数组
11.1数组创建
第1种:使用new关键字创建

即:如果使用new来创建数组时,Array的A要大写!!
第2种:使用字面量方式创建[常用]

而且这里要注意:JS的数组中不要求元素是相同类型
(这一点和C,C++,Java等静态类型语言差别较大,但是Python等动态类型语言也是如此)

11.2获取数组元素
使用下标的方式访问数组(从0开始)
如果下标超出范围读取元素,则结果是undefined

注意上图中的16行,arr2又重新被赋值了,那么结果业也同时变化了,因为之前说过JS是一个动态类型语言

11.3新增数组元素
11.3.1通过修改length新增




如上图所示,超出范围读取的元素结果是undefined
11.3.2通过下标新增


11.3.2通过push进行++追加++元素(追加到新的数组中)


11.4删除数组中的元素
通过使用splice方法删除元素


