13 KiB
13 KiB
JS基础
输入输出语句
alert('页面弹出警示框')
document.write('页面打印输出')
console.log('控制台打印输出')
prompt('输入对话框') 默认取的字符串类型
声明变量
let name = 10
声明常量
const pi = 3.14
基本数据类型
number
string
boolean
undefined
null
引用数据类型
Object、Function、Arry
字符串拼接
`今年${age}岁了`
'今年' + age + "岁了"
逻辑运算符
&& 与
|| 或
! 非
类型转换
转换为数字
Number('12') 转换为数字型
parseInt('12') 转换为整数数字型
parseFloat('12.5') 转换为小数数字型
转换为字符串类型
String(12) 转换为字符串型
变量.toString) 转换为字符串行
转换为布尔型
Boolean()
隐式转换
转换为数字型
算数运算符
+号作为正号可以把字符串转换成数字型
转换为字符串型
+字符串拼接
转换为布尔型
!逻辑非
分支语句
if (条件) {
语句
}
else if (条件) {
语句
} else {
}
条件? 表达式1:表达式2
switch (变量) {
case 值:
语句
break
default:
语句
}
循环语句
while (判断) {
语句
}
for (执行前语句;条件;执行后语句) {
语句
}
break 跳出
continue 跳过本次
数组
数组声明:
let 数组名 = [数据1,数据2]
数组长度:
arry.length
新增数组:
arry.push(元素...) 增加一个或者多个元素到 数组末尾,返回数组长度
arry.splice(开始位置,删除个数,数据1,数据2)
arry.unshift(元素...) 增加一个或者多个元素到 数组开头,返回数组长度
删除数组:
arry.pop() 删除最后一个元素,返回被删除的元素
arry.splice(起始位置0开始,删除个数)
arry.shift() 删除第一个元素,返回被删除的元素
修改数组:
arry[i] = 值
查询数组:
arry[i] 不存在则为undefined
遍历数组: (遍历数组处理数据,并返回新数组)
const newarr = arr.map(function (ele,index) {
ele为数组元素
index 为数组索引号
return ...
})
排序数组:
arry.sort() 会直接修改原数组
升序:
arry.sort(function(a,b){
return a - b
})
降序:
arry.sort(function(b,a){
return a - b
})
数组转字符串:
arr.json('每个值之间插入的值')
筛选数组:filter()方法创建一个新的数组,新数组中的元素是符合条件的所有元素
const newarr = arr.filter(function (element数组元素,index数组下标){
return 筛选条件
})
遍历数组:
arr.reduce(function(){}, 起始值)
arr.reduce(function(上一次值, 当前值){}, 初始值)
查找元素:
find
拷贝数组:
arr.prototype.cocat()
函数
定义函数:
function 函数名(参数1,参数2...) {
函数体
return 变量
}
调用函数:
函数名(实参1,实参2)
匿名函数:
函数表达式:将匿名函数赋值给一个变量,并通过变量名称进行调用
立即执行函数:
(function(){}) ()
剩余参数:
function(a,b,...other)
作用域
全局:
函数内部的变量,如果没有声明直接赋值,当全局变量用
局部:
函数形参为局部变量
对象
定义对象:
let people = {
name: 'lzc',
sex: 'man',
age: 18,
str: function(){
语句
}
}
访问对象:
对象.属性
对象['属性']
删除属性:
delete 对象.属性
新增属性:
对象.新属性
遍历对象:
for (let key in people) {
获取key
people[key] 只能通过此种方式获取值
}
获取对象所有属性值
const o = { name: 'lzc', age: 18}
const arr = Object.values(o) //数组里值为lzc 18
获取对象所有的键:
Object.key
拷贝对象:
const o = { name: 'lzc', age: 18}
const newo = {}
Object.assign(newo,o)
内置对象
Math:数学运算方法
方法:
PI Math属性,返回圆周率
max(1,2) 返回最大值
min() 返回最小值
abs()返回绝对值
ceil()向上取整
floor()向下取整
round()四舍五入取整
random()返回一个0-1之间,包括0不包括1
数据类型存储
基本数据类型
存放在栈里,访问速度快
引用类型(数组、方法、对象)
地址存放在栈里,数据存放在堆里,导致let x = 10; y=x 的时候,y随x变化而变化
WEB API
获取DOM对象
document.querySelector('css选择器') 获取指定的第一个元素
document.querySelectorAll() 获取指定的所有元素
得到一个伪数组(无法使用数组方法,仅能使用下标及长度)
getElementsById 通过ID
getElementsByClassName 类名
getElementsByTagName 标签名
getElementsByName name属性
操作元素内容
元素.innerText 操作元素内容,不解析标签
增:
元素.innerText = '新值'
删:
元素.innerText = ''
改:
元素.innerText = '新值'
查:
元素.innerText
元素.innerHTML 操作元素内容,解析标签
操作元素属性
元素.src .title .href
表单.value .type
操作元素样式
元素.style.width 通过style操作样式(如果有-,采用小驼峰命名比如marginTop)
元素.className 通过类名操作样式
元素.classList.add() 增加类名
元素.classList.remove() 删除类名
元素.classList.toggle() 切换类名
间隔函数
setInterval(函数,间隔时间单位ms)
关闭定时器
let 变量 = setInterval(函数,间隔时间)
clearInterval(变量)
延迟函数
setTimeout(回调函数,等待的毫秒数) 只执行一次
关闭延迟函数
clearTimeout()
自定义属性
可以在标签上加 data-自定义属性名
在dom上通过dataset获取
元素.dataset.自定义属性名
事件
元素对象.addEventListener('事件类型',事件处理函数)
事件类型:
鼠标事件:
click 点击
mouseenter 鼠标进入(没有冒泡)
mouseleave 鼠标离开(没有冒泡)
焦点事件:
focus 获取脚垫
blur 失去焦点
键盘事件:
keydown 键盘按下
keyup 键盘
文本事件:
input 当表单value 被修改时触发
页面加载事件:
load 等待所有的外部资源加载完后触发,包括图片、外部CSS,对象为window
window.addEventLinstener()
DOMContentLoaded 等待html加载完就触发,对象为document
页面滚动事件:
scroll 监听用户把页面滚动到某个区域做一些处理,比如固定导航栏,监听在window上
获取被卷去的左侧(scrollLeft)和头部(scrollTop)
获取当前滚动的长度 document.documentElement.scrollTop
页面尺寸事件:
resize 监听在window上
获取当前元素的宽度clientWidth
获取当前元素的高度clientHeight
M端事件(移动端触屏事件):
touchstart: 手指触屏开始事件
touchmove: 手指触屏滑动事件
touchend: 手指触屏结束事件
事件对象:
e.key 判断用户按下哪个键
环境对象:
this 谁调用,指向谁
事件对象
回调函数中的第一个参数即为事件对象
元素对象.addEventListener('事件类型',事件处理函数(e){
e.key #按下了哪个键
})
环境对象
函数内部的特殊对象 this ,收当前环境影响(通常指向调用方)
全局环境/普通函数下:
this 指向window 对象
对象方法:
this 指向对象
事件 谁调用 指向谁
事件流
事件完整执行过程中的流动路径,两个阶段,捕获阶段、冒泡阶段
事件捕获:当一个元素的事件被触发时,会从DOM的跟元素开始依次调用同名事件(从外到里)
事件冒泡:当一个元素触发事件时,会依次向上调用父级元素的同名事件
阻止冒泡:
事件对象.stopPropagation()
事件委托
原本需要注册在子元素的事件委托给父元素,让父元素监听
获取事件对象目标元素
事件.target.tagName
阻止默认行为
当点击提交的时候阻止对表单的提交
阻止链接的跳转
移除事件监听
removeEventListener(事件类型, 事件处理函数(匿名函数无法移除)), 获取捕获或者冒泡阶段)
元素尺寸与位置
元素尺寸:
clientWidth/clientHeight 不带边框
offsetWidth/offsetHeight 带边框的大小
元素位置:
offsetLeft/offsetTop 元素距离页面的左上距离
日期对象
获取当前时间
const date = new Date()
得到指定的日期和事件
const date = new Data('yyyy-mm-dd hh-mm-ss')
方法:
getFullYear()获取年份
getMonth()获取月份
getDate()获取月份中的每一天
getDay() 获取星期
getHours() 获取小时
getMinutes()获取分钟
getSeconds() 获取秒
其他方法:
toLocaleString() 返回该日期对象的字符串(包含日期和时间)
toLocaleDateString() 返回日期对象日期部分的字符串
toLocaleTimeString() 返回日期对象时间部分的字符串
时间戳
获取时间戳
+new Date() 获取当前时间,()里加时间格式就会自动转换
DOM节点
可以利用节点关系查找节点
父节点查找: parentNode 返回最近一级的父节点对象,找不到返回为null
子节点查找: children 返回最近一级的子节点对象
兄弟节点查找:nextElementSibling/previousElementSibling
节点操作
创建节点:
document.createElement('标签名')
追加节点:
element.append() 放到父元素的最后面
element.prepend() 放到第一个子元素前面
删除节点:
element.remove() 把对象从他所属的DOM树中删除
BOM浏览器对象模型
window(全局对象、顶级对象)
navigator:记录了浏览器自身的相关信息(ua)
location:拆分保存了URL地址的各个组成部分
document:
history:管理历史记录,前进后退
screen:
location对象
href属性:得到完整的地址,赋值则是跳转到新地址
search属性:得到? 后面的地址
hash属性:得到#后面的地址
reload方法: 刷新页面
history对象
管理历史记录,做前进、后退功能
back() 后退
forward() 前进
go() 前进后退功能(1为前进,-1为后退)
本地存储
localStorage 长久存储在浏览器中,刷新或者关闭页面也不丢失,无法存储复杂类型,直接存字符串
setItem(key,value):存储数据
getItem(key):读取数据
removeItem(key):删除数据
sessionStorage 当浏览器被关闭时,存储在这里的数据会被清除
方法和上面一致
复杂数据类型转JSON字符串
JSON.stringify(复杂数据)
JSON.parse(字符串)
正则表达式
const reg = 定义规则
reg.test(字符串) 匹配则为真
表达式:
^:匹配行首
$:匹配行尾
*:重复0次或多次
+:重复1次或多次
?:重复0次或1次
{n}:重复n次
{n,}:重复n次或者更多次
{n,m}:重复n到m次
[abc]:匹配其中一个
[a-z]:匹配a-z中的一个
[^abc]:排除abc
\d:匹配数字
\D:匹配0-9以外的字符
\w:匹配任意字母、数字和下划线
\W:与w相反
\s:匹配空格(换行符、制表符)
\S:取反
替换
字符串.replace(/正则/,'替换的文本')
展开运算符
... 将一个数组/对象进行展开
...arr
箭头函数
用于替代匿名函数
const fn = function() {
console.log('匿名函数')
}
fn()
const fn = () => {
console.log('箭头函数')
}
fn()
如果只有一个形参可以省略小括号
const fn = x => {
语句
}
如果函数只用一句代码,则可以省略大括号,这句代码就是返回值
const fn = x => 1+1
如果返回的是一个对象,则需要用小括号把对象包裹起来
const fn = () => ({ name: 'lzc' })
对象属性和方法简写
在对象中,如果属性名和属性值一致,可以简写只写属性名
对象中,方法可以简写
解构
数组解构:
const [max,min,avg] = [1,2,3]
max = 1
对象解构:
const { max, min, avg } = user
重命名:
const { 原名:新名 } = user
对象数组解构:
构造函数
命名以大写字谜开头,用new构造
function 名字(参数1,参数2) {
this.实参1=形参1 #实例成员
this.实参2=形参2
}
名字.参数 = 值 静态成员
const People = new 名字('实参1','实参2')
实例成员:
实力对象的属性和方法即为实例成员
实力对象互相独立
静态成员:
构造函数的属性和方法被称为静态成员
异常处理
throw 抛出异常,程序终止运行
throw new Error('错误描述')
try试试/catch拦住/finally 最后 捕获错误信息
try {
可能出错的语句
} catch (error) {
出现错误才执行
} finally {
不管如何都执行
}
改变this
bind()
fun.bind(在fun函数运行指定的this值,arg1,arg2)
防抖
单位时间内,频繁触发事件,只执行最后一次
节流
单位时间内,频繁触发事件,只执行一次