002-JavaScript
JavaScript
-
JavaScript(简称JS)是一门跨平台、面向对象的脚本语言(就是不用编译直接运行的语言),是用来控制网页行为,实现页面的交互效果
-
JavaScript和Java时完全不同的语言,不论是概念还是设计。但是基础语法类似
-
组成
- ECMAScript:规定了JS基础语法和新知识,包括变量、数据类型、流程控制、函数、对象等
- BOM:浏览器对象模型,用于操作浏览器本身,如:页面弹窗、地址栏操作、关闭窗口等
- DOM:文档对象模型,用于操作HTML文档,如:改变标签内的内容、改变标签内字体样式等
JS核心语法
JS引入方式
-
内部脚本:将JS代码定义在HTML页面中
-
JS代码必须位于
<script> </script>
标签之间 -
在HTML文档中,可以在任意地方,防止任意数量的
<script>
-
一般会把脚本置于
<body>
元素的底部,可以改善显示速度
-
-
外部脚本:将JS代码定义在外部JS文件中,然后引入到HTML页面中
基础语法
变量&常量
-
JS中用let关键字来声明变量(弱类型语言,变量可以存放不同类型的值)
-
变量名需要遵循如下规则(和Java基本一致):
- 只能用字母、数字、下划线、美元符号组成,且数字不能开头
- 变量名严格区分大小写,如name和Name时不同的变量
- 不能使用关键字做变量,如:let、var、if、for
-
JS中用const关键字来声明常量
-
一旦声明,常量的值就不能改变(不可以重新赋值)
-
输出语句
- alert(a):弹出框(实际上是window.alert(),window可省略)
- console.log(PI):输出到浏览器控制台(F12可查看)(打一个log回车可快速生成)
- document.write(PI):输出到body区域(不常用)
数据类型
-
JavaScript的数据类型分为:基本数据类型和引用数据类型(对象)
-
基本数据类型:
- number:数字
- boolean:布尔,true、false
- null:对象为空。JS是大小写敏感的,因此null、Null、NULL是完全不同的
- undefined:当声明的变量未初始化时,该变量的默认值是undefined
- string:字符串:字符串,单引号、双引号、反引号(大键盘上的tab上方,反引号和波浪线在同一个键上)皆可,推荐使用单引号
-
获取数据类型
-
使用typeof运算符
-
-
模板字符串语法
-
`` // 反引号,大键盘上的tab上方,反引号和波浪线在同一个键上
-
内容拼接变量时,使用
${}
包住变量
-
函数
-
介绍:函数(function)是被设计用来执行特定任务的代码块,方便程序的封装复用
-
定义具名函数:JS中的函数是通过function关键字进行定义,语法为:
- 弱类型语言,不需要指定形参和返回值的类型
-
调用具名函数:函数名称(实际参数列表)
- 参数填多了也没关系,多出来的参数会被忽略掉
-
定义匿名函数:匿名函数是指一种没有名称的函数,可以通过两种方式定义:函数表达式和箭头函数
- 此时,前面的变量add就成为了函数名
-
调用匿名函数:通过变量名直接调用
自定义对象
-
定义格式
-
定义函数时可以省略冒号和function
-
调用格式
-
注意:在箭头函数中,this并不指向当前对象,而是指向当前对象的父级!!!(直接定义对象,其父级是全局对象window),不推荐使用这种方法定义对象内函数
json
-
概念:JavaScript Object Notation,JavaScript对象标记法(JS对象标记法书写的文本)
-
由于其语法简单,层次结构鲜明,现多用于数据载体,在网络中进行数据传输
-
JS对象和json本质上完全不一样,JS对象是对象,json本质上就是字符串
-
示例
DOM
-
概念:Document Object Model,文档对象模型
-
将标记语言的哥哥组成部分封装成对应的对象
- Document:整个文档对象
- Element:元素对象
- Attribute:属性对象
- Text:文本对象
- Comment:注释对象
DOM操作
-
DOM操作核心思想:将网页中所有的元素当做对象来处理。(标签的所有属性在该对象上都可以找到)
-
操作步骤:
- 获取要操作的DOM元素对象
- 操作DOM对象的属性或方法(不建议还在MDN查,建议在W3School中查询)
-
获取DOM对象
- 根据CSS选择器来获取DOM元素,获取匹配到的第一个元素:document.querySelector('选择器')
- 根据CSS选择器来获取DOM元素,获取匹配到的所有元素:document.querySelectorAll('选择器')
- 注意:得到的十一个NodeList节点集合,是一个伪数组(就是有长度、有索引,的数组,但没有操作方法)
-
示例
-
早期的获取DOM对象方式
事件监听
-
事件:HTML事件是发生在HTML元素上的“事情”。比如:
- 按钮被点击
- 鼠标移动到元素上
- 按下键盘按键
-
事件监听:JavaScript可以在事件触发时,就立刻调用一个函数作出相应,也称为事件绑定或注册事件
-
语法(新版):
事件源.addEventListener('事件类型', 事件触发执行的函数);
- 可以多次绑定同一事件,绑定的事件都会触发
-
事件监听三要素
- 事件源:那个DOM元素出发了事件,要获取dom元素
- 事件类型:用什么方式触发,比如:鼠标单击 click
- 事件触发执行的函数:要做什么事
-
早期版本写法(仅了解):
事件源.on事件 = function() {...}
- 多次绑定同一事件,后面的事件会覆盖前面的事件
常见事件
鼠标事件
- click:鼠标点击
- mouseenter:鼠标移入
- mouseleave:鼠标移出
键盘事件
- keydown:键盘按下触发
- keyup:键盘抬起触发
焦点事件(例如点一下输入框就聚焦在输入框了)
- focus:获得焦点触发
- blur:失去焦点触发
表单事件
- input:用户输入时触发
- submit:表单提交时触发
JS模块化
-
js文件内导包
- 被导出的函数要加export关键字
-
导入的位置用import关键字导入,大括号中可以填多个内容
-
html文件内导入js文件
- 如果js文件使用了export和import等关键字,那么就形成了模块化的js文件,此时导入html中需要指定type为"module"