JavaScript学习笔记
本文最后更新于 2024年11月4日 下午
目录(默认关闭,点击展开):
展开目录找的更快
点击展开目录
一、JavaScript概述
JavaScript之父:布兰登·艾克
ES1:1997年
ES2:1998年
ES3:1999年
ES5:2009年
ES2015:也叫ES6,发布于2015年
ES2016:
.............
ES2023:
主要学习ES5
二、JavaScript语言特性
HTML是标记语言(只有定义内容和结构,没有逻辑控制和操作)
JavaScript是编程语言(可以编写用于执行的程序)
编程语言 | 编译型编程语言 | 解释型编程语言 |
---|---|---|
一次性全部编译成计算机识别的机器语言,再执行 | 多次边编译边执行 | |
C语言、C++、C# | Python | |
Go语言 | JavaScript | |
Java语言 | PHP |
JavaScript简称“JS”、JS在浏览器中的解释引擎最主流的是谷歌的“V8引擎”(类似于汽车领域的V8发动机的地位)
三、JS书写位置
1、可以直接在HTML中的script标签内写js语言
2、类似于CSS也可以通过link引入的方式:
但是引入Src的script标签里面不能再写js代码了
script有一个type属性,写引用的语言类型的,例如js写type="text/javascript"
四、JS基本语法
- 每一条语句后面要加分号(不强制,但要规范)
- JS大小写敏感
在VScode中,搜索transform可以找到并设置选中转大小写的快捷键
单行注释://
多行注释: /**/
输出语句:
1 |
|
五、JS数据类型
1、原始类型
不可再分的数据类型叫原始类型
- 数字类型 (number)
0o :八进制
0x :十六进制
0b :二进制
- 字符串类型 (string)
单引号''(内容通过)
双引号""(内容通过)
反引号``(可以直接换行,)
- 布尔类型 (boolean)
true
false
- undefined
undefined(值未定义)
- null
null空
2、引用类型
可以再分的数据类型叫引用类型
- 对象(object)
存放一系列数据、功能的集合体
1 |
|
查看数据类型typeof
1 |
|
- 函数(function)
六、JS变量
1、定义变量
1 |
|
变量名命名:字母,下划线,美元开头,可以有数字,但不能以数字开头
2、赋值变量
1 |
|
在JavaScript中,变量的类型也可以发生变化
强类型语言变量可以变化,但是不能变化类型,弱类型语言可以变量变化类型。js属于弱类型语言,而Python是强类型语言。
JavaScript是弱类型解释型语言,故又称js为脚本语言。
3、语法糖
1 |
|
变量声明赋值一气呵成
4、变量提升
1 |
|
直接输出没有定义的变量会报错(Uncaught ReferenceError: age is not defined)
1 |
|
先引用再定义会变量提升,不会报错,但输出结果为(undefined)
1 |
|
这段代码是和上面的代码是等价的。
变量提升范围不会超过脚本块
七、js对象
1、对象属性
1 |
|
- 读取对象存在的属性(读取18)
1 |
|
- 读取对象不存在的属性(不会报错,结果是undefined)(类型也为undefined)
1 |
|
- 读取不存在的对象(报错)
1 |
|
再次定义abc(仍然报错,因为abc没有赋值,没有赋值就是原始类型undefined,原始类型不可再拆分)
1 |
|
再次将abc赋值为null(还是报错,因为null也是原始类型,不可拆分)
1 |
|
再次将abc赋值为大括号(不会报错,大括号表示对象,只不过现在这个大括号内为空)
1 |
|
但是,将abc赋值为数字、字符串(虽然为原始类型,但是也不会报错,就唯独undefined和null会报错)
1 |
|
留坑
undefined和null读取属性会报错
2、修改属性
1 |
|
通过取值赋值即可
类似于上面留坑,undefined和null修改属性会报错 ,原始类型不会报错但无法修改属性,引用类型正常
3、增加属性
1 |
|
和修改属性一样,取值赋值即可
类似于上面留坑,undefined和null增加属性会报错 ,原始类型不会报错但无法增加属性,引用类型正常
4、删除属性
1 |
|
直接删(不推荐)
类似于上面留坑,undefined和null删除属性会报错 ,原始类型不会报错但无法删除属性,引用类型正常
1 |
|
将待删除的属性赋值为undefined
类似于上面留坑,undefined和null修改属性会报错 ,原始类型不会报错但无法修改属性,引用类型正常
5、属性表达式
原本读取对象是对象点属性的方式,而属性表达式是另外的一种方式。
用途:一些用引号命名非法对象名称,无法通过用对象点的方式调用。
1 |
|
等价于
1 |
|
对象中括号内引号写属性名
其他增删改类似,同理!
6、动态取值
(属性表达式第二个应用)
简单案例:
1 |
|
间接取值
1 |
|
通过更换var attr = "name"的值,可以打印不同的值。当var attr = "name"的name是用户输入的时候,应用场景就来了。
1 |
|
1 |
|
注:以上通过弹窗获取用户指令信息,不符合es标准。
八、JS全局对象
1、特殊的name(引例)
1 |
|
没有赋值的name的值并不是undefined,而是一个什么都没显示的内容,并且类型为字符串类型。
当赋值给name数字1时,类型仍然为字符串类型:相比于其他关键字,name显得与众不同。
当删除name的赋值语句后,仍然能访问到上次赋值的值(重启服务后恢复默认值)
这是因为name是全局对象window的一个属性。可以不用通过对象,直接可以访问的属性。
2、全局对象
所有的JS宿主环境,都会提供一个全局对象,这个全局对象以及全局对象的属性,可以直接访问。
全局对象的名称和属性,会因宿主环境的不同而不同。其中在浏览器这个宿主环境中,全局对象叫window
window对象代表当前浏览器窗口,提供对宿主环境的API访问。
name默认为空字符串,不论给name赋予什么类型的值,都会转化为字符串类型:
3、定义变量
定义的所有变量,都会作为window对象的属性,存在全局对象里面。
如果定义的变量没有赋值,不会用undefined覆盖已经存在的变量值。未赋值的对象也不会覆盖window对象的属性。
1 |
|
但是变量的提升不会超过脚本块。
但是不同脚本块在window对象中是一样的,说明undefined不能覆盖window对象的属性值。
4、window的打印输出
1 |
|
其中window对象的console属性里面的log函数,就对应打印的功能
通过给console属性复制可以使其语句失效:
1 |
|
可以通过其他打印函数展现:
1 |
|