1.操作元素的类:
- 元素.classList.add('类名')
- 元素.classList.remove('类名')
- 元素.classList.toggle('类名') //切换类名
2.操作表单元素属性:
- 表单.value='用户名'
- 表单.type='password'
-
- disabled
- checked
- selected
3.自定义属性:
- 定义:
- data-(自定义属性名)
-
-
-
- 操作自定义属性名:box.dataset.属性名
4.间歇函数
- 开启定时器
- let id=setInterval(函数,间隔事件)
-
- 关闭定时器
- clearInterval(id)
5.元素添加监听事件(addEventListener)(特点:可绑定多个事件)
- 添加事件:addEventListener(事件类型,事件处理函数,是否使用捕获机制)
- 解绑事件:removeEventListener('click',fn)
- //注意:匿名函数无法被解绑
-
-
- 监听事件类型:click,
- mouseover,mouseout (有冒泡效果)
- mouseenter,mouseleave (没有冒泡效果,推荐)
- focus,blur (获得焦点,获得焦点)
- keydown,keyup (键盘按下,键盘抬起)
- input (用户输入触发)
- load (外部资源加载完毕触发,给window加)
- DOMContentLoaded (初始HTML文档加载完触发,给document加)
- scroll(scrollLeft、scrollTop) (获取元素被卷去的距离(document.documentElement.scrollTop:检测页面滚动的距离))
- resize(clientWidth、clientHeight) (窗口尺寸改变时触发)
- 检测屏幕宽度:let w = document.documentElement.clientWidth
1.offsetLeft、offsetTop(只读属性,获取元素距离自己定位父级的左、上距离)
2.offsetWidth&offsetHeight获得的是 内容+padding+border
元素尺寸于位置-尺寸
- element.getBoundingClientRect()
- 方法返回元素的大小以及相对于视口的位置
总结:
事件对象:
事件对象常用属性:
- type(获取当前的事件类型)
- clientX/clientY(获取光标相对于浏览器可见窗口左上角的位置)
- offsetX/offsetY(获取光标相对于当前DOM元素左上角的位置)
- key(用户按下的键盘键的值) (不提倡使用keyCode)
-
- e.stopPropagation()(阻止事件冒泡)
- e.preventDefault()(阻止默认行为)
-
事件委托(把注册事件放在父元素身上,利用了事件冒泡的特点):
on事件解绑,直接将它指向null即可
- btn.onclick = function(){
- alert('点击了')
- }
-
- //解绑事件
- btn.onclick = null
6.页面滚动事件
- //让页面滚动到y轴1000像素的位置
- window.scrollTo(0,1000)
7.日期对象
- const date = new Date()
-
- const date = new Date('2008-8-8')
- console.log(date)
-
- //日期对象方法
- getFullYear()
- getMonth() (取值为0-11,此处需加1)
- getDate() (获取月份中的每一天)
- getDay() (获取星期,取值为0-6)
- getHours() (取值为0-23)
- getMinutes() (取值为0-59)
- getSeconds() (取值为0-59)
-
- //获取时间戳的三种方式
- //1.使用getTime()方法
- const date = new Date()
- console.log(date.getTime())
-
- //2.简写+new Date()
- console.log(+new Date())
-
- //3.使用Date.now() (无需实例化,但只能得到当前时间的时间戳,而前面两种可以获得指定时间的时间戳)
- console.log(Date.now())
8.节点操作
- //1.父节点查找
- 子元素.parentNode
-
- //2.子节点查找
- 父元素.children (获得所有子元素节点,返回的是一个伪数组,没有数组的方法)
-
- //3.兄弟节点查找
-
- //3.1下一个兄弟节点
- nextElementSibling
-
- //3.2上一个兄弟节点
- previousElementSibling
-
-
- //4.创建节点
- document.createElement('标签名')
-
- //5.追加节点
- 父元素.appendChild(要插入的元素)
- 父元素.insertBefore(要插入的元素,在哪个元素前面)
-
- //6.克隆节点
- 元素.cloneNode(布尔值) (此处若为true,则代表克隆时会包含后代节点;为false,不包含)
-
- //7.删除节点
- 父元素.removeChild(要删除的元素)
9.BOM对象
- //创建延时函数
- let timer = setTimeout(回调函数,等待的毫秒数)
-
- //清除延时函数
- clearTimeout(timer)
-
-
-
- //window.location对象
- location.href (获取完整的URL地址,对其赋值用于地址的跳转)
- location.search (获取地址中携带的参数,符号?后面部分)
- location.hash (获取地址中的哈希值,符号#后面部分)
- location.reload (用来刷新当前页面,传入参数true时表示强制刷新)
-
-
- //window.navigator对象
- navigator.userAgent (检测浏览器的版本及平台)
-
-
-
- //window.history对象
- history.back() (可以退后功能)
- history.forward() (前进功能)
- history.go(参数) (前进后退功能,参数如果是1,前进一个页面;如果是-1,后退一个页面)
10.本地存储
- //1.存储数据
- localStorage.setItem(key,value)
-
- //2.获取数据
- localStorage.getItem(key)
-
- //3.删除数据
- localStorage.removeItem(key)
-
- //4.清空数据
- localStorage.clear()
-
-
-
- //本地存储只能存储字符串,不能存储复杂数据类型
- JSON.stringify(复杂数据类型)
-
- //当我们把本地存储中的数据取出来时,取出的是字符串,不是对象,无法直接使用
- JSON.parse(JSON字符串)
11.内置构造函数
- Object
- Array
- String
- Number
12.数组方法
- const arr = ['pink','red','blue']
-
- //1.map(迭代数组)
- let result = arr.map((item, index) => item * 2)
-
- //2.join(拼接数组)
- arr.join('') (join()方法用于把数组中的所有元素转换为一个字符串)
-
- //3.forEach(遍历数组的每个元素)
- arr.forEach(function (item,index){ //此处索引号可以省略
- console.log(`当前数组元素是:${item}`)
- console.log(`当前数组元素的索引是:${index}`)
- })
-
- //4.filter (过滤数组) //返回新数组,不会影响原数组
- const result = arr.filter(function(item, index){ //此处索引号可以省略
- return item > 30
- })
-
- //5.reduce(返回函数累计处理的结果,常用于求和等)
- 5.1求和运算
- const count = arr.reduce((prev, item) => prev + item)
- console.log(count)
- 5.2
-
- //6.from(伪数组转换为真数组)
- Array.from()
-
-
-
13.字符串方法
14.数值类型方法
- const price = 12.345
- console.log(price.toFixed(2)) //12.35
15.构造函数、原型对象、对象原型三者的关系以及如何构成继承关系(此处需要理解,详解请进入如下链接)
16.浅拷贝与深拷贝
浅拷贝:
深拷贝:
深拷贝第一种(递归实现):
深拷贝第二种(lodash库中的cloneDeep方法):
3.深拷贝第三种(通过JSON.stringify()实现):
17.正则表达式
- const reg = /前端/
-
- //1.test()方法 (返回true或false)
- reg.test(被检测的字符串)
-
- //2.exec()方法 (返回的是数组)(在一个指定字符串中执行一个搜索匹配)
- reg.exec(被检测字符串)
-
- //3.元字符(Java中已学过,此处不再赘述)
-
- //4.修饰符
- /前端/修饰符
- 4.1 i(ignore忽略大小写)
- console.log(/a/i.test('a')) true
- console.log(/a/i.test('A')) true
-
- 4.2 g(global匹配所有满足正则表达式的结果)
-
- //5.replace()方法
- 字符串.replace(/正则表达式/,'替换的文本')
18.闭包函数
- //闭包 = 内层函数 + 外层函数的变量
- function fn(){
- let count = 1 //实现数据私有,无法直接修改count
- function fun(){
- count++
- console.log(`函数被调用${count}次`)
- }
- return fun
- }
- const result = fn()
- result() //2
- result() //3
19.arguments(动态参数)
- //实际上就相当于Java中的可变参数
- function sum(){
- let s =0
- for(let i=0; i<arguments.length; i++){
- s += arguments[i]
- }
- console.log(s)
- }
- //调用函数
- sum(5.10)
- sum(1,2,4)
-
- //注意:arguments是一个伪数组,它只存在于函数中
20.剩余参数
- const arr = [1,5,3,8,2]
- console.log(...arr) //不会修改原数组
-
-
-
- //剩余参数用于获取多余的实参
- //注意:动态参数是伪数组,剩余参数是真数组
21.解构赋值
- //数组结构
- const [a, b, c]=[1, 2, 3]
-
- //交换两个变量
- let a = 1
- let b = 3; //此处必须要有分号,也可以写成 ;[b, a]=[a, b]
- [b, a]=[a, b]
-
-
- //支持多维数组的结构
- const [a, b] = ['苹果', ['小米', '华为']]
- console.log(a) //苹果
- console.log(b) //['小米', '华为']
-
- const [a, [a,b]] = ['苹果', ['小米', '华为']]
- console.log(a) //苹果
- console.log(b) //小米
- console.log(c) //华为
-
-
-
- //对象解构
- const user = {
- name: '小明',
- age: 18
- }
- const [name, age] = user
-
- console.log(name) //小明
- console.log(age) //18
-
- const { name: uname, age } = user //把原来的name变量重新命名为uname
- console.log(uname) //小明
- console.log(age) //18
-
-
-
-
-
- //数组对象解构
- const pig = [
- {
- name: '佩奇',
- age: 6
- }
- ]
- const [{ name, age}] = pig
- console.log(name, age)
-
-
22.立即执行函数
- //立即执行函数写法
- (function t(){ })();
-
- 或者
-
- ;(function t(){ })()
-
- //注意:立即执行函数前必须加分号
23.对象的常用方法
- const o = { name: '佩奇', age: 6}
- //1.获取键
- const arr = Object.keys(0)
- console.log(arr) //['name', 'age']
-
- //2.获取值
- const arr =Object.values(o)
- console.log(arr) //['佩奇',6]
-
- //3.对象拷贝
- const obj = {}
- Object.assign(obj, o)
- console.log(obj) //{name: '佩奇',age: 6}
-
- //4.assign方法也可给对象添加新属性
- Object.assign(o, {gender: '女'})
- console.log(o) //{name: '佩奇',age: 6, gender: '女'}
-
24.异常处理
25.改变this指向
1.call()
2.apply()
3.bind()
总结:
26.节流与防抖
节流:
防抖:
总结:
使用lodash库实现节流与防抖: