JS基础
隐式类型转换
+号作为正号解析可以转换成Number
let price = +prompt("输入商品价格:")
let num = +prompt("输入购买数量:")
冒泡排序
先处理首尾,大循环次数==数组长度-1
function sort(arr){
let len = arr.length;
for (let i = 0;i<len - 1 ;i++){
for (let j = 0;j < len - 1 - i ;j++){
if (arr[j] < arr[j+1]){
[arr[j] , arr[j+1]] = [arr[j+1] ,arr[j]]
}
}
}
return arr;
}
WebApi
分类
DOM(文档对象模型)
BOM(浏览器对象模型)
类名的操作,作用不同样式
let box = document.querySelector('div')
box.classList.remove('one')
box.classList.add('two')
box.classLsit.toggle('one')
随机数获取
let random = getRandom(0,100)
事件类型
鼠标事件
click --鼠标点击事件
mouseenter --鼠标经过
mouseleave --鼠标离开
焦点事件
表单获得光标
focus --获得焦点
blur --失去焦点
键盘事件
keydown --键盘按键按下
keyup --键盘按键抬起
文本事件
input --用户输入
DOM节点获取
获取父节点
子元素.parentNode
获取子节点
父元素.children[i]
查找兄弟节点
兄弟.nextElementSibling
兄弟.previousElementSibling
创建追加节点
let li = document.createElement('li')
ul.appendChild(li)
ul.insertBefore(li,ul.children[1])
克隆节点
---元素.cloneNode(布尔值)---
--true,克隆时会包含后代节点一起克隆
--false,克隆时不包含后代节点
--默认为false
删除节点
父元素.removeChild(要删除的元素)
时间对象
let date = new Date()
let year = date.getFullYear()
let month = date.getMonth() + 1
let day = date.getDate()
let week = date.getDay() + 1
let hours = date.getHours()
let minutes = date.getMinutes()
let second = date.getSeconds()
let timestamp1 = date.getTime()
let timestamp2 = Date.parse(date)
let timestamp3 = date.valueOf()
let timestamp4 = +date
let timestamp5 = Date.now()
let to = +new Date('2022-5-30 12:00:00')
let timestamp1 = +new Date('2023-12-12 12:00:00')
let timestamp2 = Date.now()
let seconds = (timestamp1 - timetamp2)/1000
let day = parseInt(seconds/60/60/24)
let hours = parseInt(seconds/60/60%24)
let min = parseInt(seconds/60%60)
let sec = parseInt(seconds%60)
事件
事件注册
传统on...注册
--同一个对象,后面注册的事件会覆盖前面注册(同一个事件)
--直接使用null覆盖就可以实现事件解绑
--都是冒泡阶段执行的
事件监听注册
--addEventListener(事件类型,事件处理函数,,是否使用捕获)
--后面注册的事件不会覆盖前面注册的事件(同一个事件)
--可以通过第三个参数确定是在冒泡或者捕获阶段执行
--必须使用removeEventListener(事件类型,事件处理函数,获取捕获或者冒泡阶段)
--匿名函数无法解绑
事件对象
元素.addEventListener('click',function(e){
console.log(e)
})
常见的事件对象属性
1. type
-- 获取当前事件类型
1. clientX / clientY
-- 获取光标相对于浏览器可见窗口左上角的位置
2. offsetX / offsetY
-- 获取光标相对于当前DOM元素左上角的位置
3. pageX / pageY
-- 获取光标相对于整个页面的坐标
4. key
-- 用户按下键盘的键
-- 现在不提倡使用keyCode
事件流
事件完整执行过程中的流动路径
--冒泡
__ 当一个元素的事件被触发时,同样的事件会在该元素的所有祖先元素中依次被触发。 __
--捕获
1. 从DOM的根元素开始去执行对应的事件(从外到里)
2. addEventListener(事件类型,事件处理回调,是否使用捕获机制)
--默认为false,true捕获阶段触发(很少使用)
阻止事件流
e.stopPropagation();
e.preventDefault();
事件委托
利用事件冒泡
let ul = document.querySelector('ul')
ul.addEventListener('click',function(e){
alert('我点击了'+e.target)
})
网页动效
加载事件
load事件
-- 监听整个页面资源,给window加
DOMContentLoaded
-- 给document加,当初始化的HTML文档被完全加载和解析完成之后(DOM树完成),DOMContentLoaded事件被触发,而无需等待样式表、图像等完全加载.
scroll滚动家族
使用场景:
滚动一段距离,隐藏元素
获取宽高:
-- 获取元素的内容总宽度(不包含滚动条)返回值不带单位
-- scrollWidth(this宽度)和scrollHeight(内容高度) 可修改(无单位)
获取位置
-- 获取元素内容往左、往上滚出去看不到的距离
-- scorllLeft 和 scorllTop(页面被拉出的长度)
document.documentElement.scrollTop
offset家族
获取宽高:
-- 获取元素自身宽高、包含自身设置的宽高、padding、border(盒模型 外加模式)
-- offsetWidth 和 offsetHeight
获取位置:
-- 获取元素距离自己定位父级元素的左、上距离
-- offsetLeft 和 offsetTop (只读属性)
client家族
获取宽高:
-- 获取元素的可见部分宽高(不包含边框,滚动条等)
-- clientWidth 和 clientHeight
获取位置:
-- 获取左边框和上边框宽度
-- clientLeft 和 clientTop (只读属性)
会在窗口尺寸改变的时候触发事件:
-- resize
检测屏幕宽度:
window.addEventListener('resize',function(e){
console.log(document.documentElement.clientWidth)
})
Window对象
BOM(浏览器对象模型 )
window
-- document
-- screen
-- navigator
-- location
-- history
window时最大对象
定时器-延时函数
setTimeout(回调,时间)
JS执行机制
同步
-- 执行栈
异步
-- 任务队列
-- 宏任务
-- 微任务 (优先)
location对象
location.href
location.search
location.hash
location.reload(true)
navigator对象
数据类型为对象,该对象下记录了浏览器自身的相关信息
常用属性和方法:
-- 通过userAgent检测浏览器的版本及平台
history对象
浏览器前进后退
-- back() 后退
-- forward() 前进
-- go( 参数) 参数如果是1前进1个页面,如果是-1后退1个页面
本地存储
大小5M左右 不可跨域
-- localStorage
-- sessionStorage
正则表达式
边界符
^ --以...开始
$ --以...结束
写在一起则是精确匹配(中间必须符合要求)
量词
* -- 重复零次或更多次
+ -- 重复一次或更多次
? -- 重复零次或一次
{n} -- 重复n次
{n,} -- 重复次或更多次
{n,m} -- 重复n到m次
console.log(/a*/.test('aaa'))
console.log(/a+/.test('aaa'))
console.log(/a{5}/.test('aaaaa'))
元字符
字符类
[] -- 匹配字符集合
[^a-z] -- 取反
. -- 匹配换行符之外的任何单个字符
console.log(/^[a-z]$/.test('f'))
console.log(/^([a-z])*$/.test('fwqe'))
预定类
\d -- 匹配0-9之间的任一数字,相当于[0-9]
\D -- 匹配所有0-9以外的字符,相当于[^0-9]
\w -- 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9]
\W -- 除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9]
\s -- 匹配空格(包括换行符、制表符、空格符)相当于[\t\r\n\v\f]
\S -- 匹配非空格的字符,相当于[^\t\r\n\v\f]