【前端】JavaScript
JavaScript
JavaScript是一门世界上最流行的脚本语言。ECMAScript可以理解为是JavaScript的一个标准
引入 JavaScript
- 内部标签
1 | <!--Script标签内,写JavaScript代码--> |
- 外部引入
1 | <script src="js/helloworld.js"></script> |
基本语法
1 | <!--Script标签内,写JavaScript代码--> |
严格检查格式
'use strict';
严格检查模式,必须写在JavaScript第一行,防止JavaScript不严谨的语法误用。(前提:IDEA需要设置支持ES6语法)
数据类型
JavaScript数据类型包括:数值、文本、图形、音频、视频。
所有变量类型都是var / let
1 | var num; |
number
JavaScript不区分小数和整数
1 | 123 // 整数 |
字符串
1 | var str1 = 'abc'; |
比较运算符
1 | = // 赋值 |
注意:
NaN===NaN
,这个与所有数值都不相等,包括自己- 只能通过
isNaN(NaN)
判断是否为NaN
null 和 undefined
- null:空
- undefined:未定义
数组
1 | var arr = [1,2,3,4,5,'hello',null,true]; |
取数组下标如果越界了,则返回undefined
。
常用方法:
- indexOf():获取某元素对应的索引
- slice():截取Array的一部分,返回一个新数组
- push():向尾部压入一个数据
- pop():弹出尾部的一个元素
- unshift():向头部压入数据
- shift():弹出头部的第一个数据
- sort():排序
- reverse():元素反转
- concat():连接数组
- join():打印使用特定字符串连接后的数组
对象
对象是大括号,数组是中括号。每个属性之间使用逗号隔开,最后一个不需要
1 | var person = { |
Map 和 Set
Map:可重复的键值对集合
1 | var map = new Map([['tom', 100], ['jack', 90]]); |
Set:无序不重复的集合
1 | var set = new Set([1,3,3,2,2]); |
iterator
遍历数组
1 | // in:取索引 |
遍历Map
1 | var map = new Map([['tom', 100], ['jack', 90]]); |
遍历Set
1 | var set = new Set([5, 6, 7]); |
函数
定义函数
定义方式一
1 | function abs(x) { |
定义方式二
1 | var abs = function(x){ |
function(x){....}
是一个匿名函数。但是可以把结果赋值给abs
,通过abs
就可以调用函数。
调用函数
1 | abs(10); |
参数问题:JavaScript可以传任意个参数,也可以不传参数(返回undefined
)。假设不传入参数,需要手动判断:
1 | var abs = function(x){ |
arguments
代表传递进来的所有参数,是一个数组。
1 | var abs = function(x){ |
rest
ES6引入的新特性,获取除了已经定义的参数外的所有参数
1 | function test(a, b, ...rest) { |
变量的作用域
在JavaScript中,var定义变量实际是有作用域的。假设在函数体中声明,则在函数体外不可以使用。内部函数可以访问外部函数的成员变量,反之不行。
1 | function test() { |
提升变量的作用域
JavaScript执行引擎会先定义所有全局变量,然后按顺序赋值。
全局变量
放在函数外面的变量都是全局变量。默认所有的全局变量,都会自动绑定在window对象上.
1 | var x = 'xxx'; |
JavaScript实际上只有一个全局作用域(window
对象),任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域(windows
对象中)都没找到,报错ReferenceError
规范
由于所有的全局变量都会绑定到window
上,如果不同的js文件,使用了相同的全局变量,就会发生冲突。为避免冲突,可使用自定义唯一全局变量。
1 | // 唯一全局变量 |
将自己的代码全部放入自定义的唯一空间名中,降低全局命名冲突的问题
局部作用域 let
ES6 let
关键字,解决局部作用域冲突问题
常量 const
ES6 const
关键字
1 | const PI = '3.14'; |
方法
定义方法
方法就是把函数放在对象的里面,对象只有两个东西:属性和方法
1 | var person = { |
内部对象
JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。在JavaScript中一切即为对象,任何js支持的类型都可以用JSON表示。格式:
- 对象用
{ }
- 数组用
[ ]
- 所有的键值对用
key: value
JSON字符串和JS对象的转换:
1 | var user = { |
面向对象编程
- 类:模板,原型对象
- 对象:具体的实例
原型对象
语法:childObj.__proto__ = parentObj
。子对象的原型是父对象,可获得父对象的方法。
class继承
class
关键字,是在ES6引入的。
- 定义一个类,包含属性和方法
1 | class Student { |
- 继承
1 | class PrimaryStudent extends Student { |
原型链
__ proto __:Object()的原型对象还是Object()对象。
操作 BOM 对象
BOM:浏览器对象模型。
window
window
代表浏览器窗口。
Navigator
Navigator
封装了浏览器的信息。
screen
screen
代表屏幕属性。
location
location
代表当前界面的URL信息。
1 | host: "www.baidu.com" |
document
document
代表当前页面
1 | document.title // 当前页面的标题 |
获取具体的文档树节点
1 | document.getElementById('id'); |
获取cookie
1 | document.cookie |
history
1 | history.back() // 后退 |
操作 DOM 对象
DOM:文档对象模型。浏览器网页就是一个DOM属性结构。
- 更新:更新DOM节点
- 遍历:遍历得到DOM节点
- 删除:删除DOM节点
- 添加:添加新DOM节点
获得DOM节点
1 | var h1 = document.getElementsByTagName('h1'); |
更新DOM节点
1 | <div id='id1'> </div> |
操作文本
1 | id1.innerText = '456' // 修改文本的值 |
操作JS
1 | id1.style.color = 'red'; |
删除节点
步骤:获取父节点 ——> 通过父节点删除自己
1 | var self = document.getElementById('p1'); |
插入节点:appendChild
1 | var js = document.getElementById('js'); |
插入节点:insert
1 | // 要包含的节点.insertBefore(newNode, targetNode) |
操作表单
表单:form DOM树
- 文本框 text
- 下拉框 select
- 单选框 radio
- 多选框 checkbox
- 隐藏域 hidden
- 密码框 password
表单的作用:提交信息
获得要提交的信息
1 | <form action="post"> |
事件
静态注册事件
在html标签中直接添加事件的响应函数,并在js文件中定义函数内容,这样既可在触发html标签事件时执行相应的响应函数。
1 | <script type="text/javascript"> |
动态注册事件
网页加载后就注册好事件。这样每次检测到事件被触发就会执行响应函数
1 | window.onload = function() { |
JQuery
jQuery库,里面存在大量的JavaScript函数,用于简化开发。
jQuery的本质:jQuery对象是DOM对象的数组 + jQuery提供的一系列功能函数。其会将查询到的符合条件的DOM对象封装成一个数组存放并附加一些功能函数。
jQuery对象和DOM对象互相转换:
- DOM转jQuery:var $obj= $(DOM对象)
- jQuery转DOM:var dom = $obj[下标]
公式:$(选择器).事件(响应函数)
1 |
|
选择器
1 | $('p').click(); // 标签选择器 |
事件
- 鼠标事件
- 键盘事件
- 其他事件
1 |
|
操作DOM
节点文本操作
1 | // 获得值 |
css操作
1 | $('#test-ul li[name=cpp]').css("color:red"); |
元素的显示和隐藏。本质:display: none
1 | $('#test-ul li[name=cpp]').show() |