前言
在B站上看了js的视频,一边看一边写笔记,好记性不如烂笔头,总结了一些比较常用的知识点。发到csdn上就当作备份。前面的一些较简单所以没有写,只写了一些我认为容易忘记的知识点,有错的地方欢迎指点。总字数:6666字
1.数值转换
Boolean()
Number()
parseInt()
parseFloat()
Math.ceil()
2.作用域
查找变量从最近父级查找,逐层向上
let 作用域为最近{}内
3.存储数据
对象数据类型,键值对集合,json
4.数组
1.设置数组长度
arr.length = 长度
2.从后面加数据
push(value)
3.在前面加数据
unshift(value)
4.删除最后一个
pop()
5.删除第一个
shift()
6.数组反转
reverse()
7.删除若干数据
splice(开始索引,多少个,value)
8.数组排序
sort()
sort(function(a,b){return a - b})
sort(function(a,b){return b - a})
9.拼接成字符串
join('-')
10.拼接数组
arr1.concat(arr2)
11.截取数组
slice(开始索引,结束索引)
11.查找value在数组的索引
indexOf(value)
12.遍历数组
forEach(function(item,index,arr){})
13.映射数组
map(function(item,index,arr){return item*10})
14.过滤数组
filter(function(item,index,arr){return item>150})
15.判断是否每一项都满足条件
every(function(item,index,arr){return item>150})
16.判断是否有某一项都满足条件
some(function(item,index,arr){return item>150})
5.字符串
1.获取对应索引位置的字符
charAt(索引)
2.将字符串的所有字母转换成小写
toLowerCase()
3.将字符串的所有字母转换成大写
toUpperCase()
4.将字符串第一个满足的内容更换
replace(换下内容,换上内容)
5.去除首尾空格
trim()
6.按照分隔符切割组成一个数组
split(分隔符)
split(/x|y/)
split(/[.]|y/)
7.截取字符串
有三个方法:
substr(开始索引,个数)
substring(开始索引,结束索引)
slice(开始索引,结束索引)
var arr = "01234567"
var res1 = substr(1,6)
var res2 = substring(1,6)
var res3 = slice(1,6)
6.数字常用方法
1.获取0~1之间的随机小数。
Math.random()
2.对数字进行四舍五入取整
Math.round(value)
3.对数字进行向上取整
Math.ceil(value)
4.对数字进行向下取整
Math.floor(value)
5.对数字进行取幂运算
Math.pow(底数,指数)
Math.pow(2,5)
6.对数字进行二次方根运算
Math.sqrt(value)
Math.sqrt(4)
7.对数字进行绝对值运算
Math.abs()
8.获取若干数字中的最大值
Math.max(value1,value2,...)
9.获取若干数字中的最小值
Math.min(value1,value2,...)
10.得到一个近似Π(派:3.14159…)的值
Math.PI
11.示例:
var a = Math.random()*(x+1)
var result = Math.floor(a)
var b = Math.random()*(y-x+1)
var result1 = Math.floor(b)+x
7.时间常用方法
var time = new data()
time.getFullYear()
time.getMonth()
time.getDate()
time.getHours()
time.getMinutes()
time.getSeconds()
time.getDay()
time.getTime()
function getDiff(time1,time2){
var ms1 = time1.getTime()
var ms1 = time1.getTime()
var sub = Math.celi((ms2-ms1)/1000)
var day = Math.floor(sub / (60 * 60 * 24))
var hours = Math.floor(sub % (60 * 60 *24) / (60 * 60))
var minutes = Math.floor(sub % (60*60) / 60)
var seconds = sub % 60
return {day:day,hours:hours,minutes:minutes,seconds:seconds}
}
8.BOM操作
操作浏览器
8.1获取浏览器窗口尺寸
window.innerWidth
window.innerHeight
8.2 浏览器的弹出层
window.alert('value')
window.confirm('value')
window.prompt('value')
8.3 开启和关闭标签页
window.open('地址/url')
window.close()
8.4 浏览器常见事件
window.onload = function(){}
window.onresize = function(){}
window.onscroll = function(){}
8.5 浏览器的历史记录操作
window.history.back()
window.history.forward()
8.6 浏览器卷去的尺寸
有滚动条时,页面隐藏的部分尺寸
document.documentElement.scrollTop
document.body.scrollTop
document.documentElement.scrollLeft
document.body.scrollLeft
var height = document.documentElement.scrollTop || document.body.scrollTop
8.7 浏览器滚动到
window.scrollTo(left,top)
window.scrollTo({
left:xx,
top:yy,
behavior:'smooth'
})
9.定时器
有返回值,返回第几个定时器,不区分定时器类型
1.间隔定时器(按照指定周期毫秒,去执行指定代码)
setInterval(function(){
},1000)
2.延时定时器(在固定的时间毫秒后执行一次代码)
setTimeout(function(){
},1000)
3.关闭定时器,不区分定时器类型
clearInterval(要关闭的定时器返回值)
clearTimeout(要关闭的定时器返回值)
10.DOM
操作文档流相关内容的属性和方法
10.1 获取元素
document.getElementById('id名称')
document.getElementsByClassName('类名')
document.getElementsByTagName('标签名')
document.querySelector('选择器')
document.querySelectorAll('选择器')
10.2 操作元素内容
元素.innerText
元素.innerText = '新内容'
元素.innerHTML
元素.innerHTML = '新内容'
10.3 操作元素属性
元素.属性
元素.属性 = '新内容'
元素.getAttribute('属性名')
元素.setAttribute('属性名','属性值')
元素.removeAttribute('属性名')
10.4 操作元素类名
元素.className
元素.className = '新类名'
10.5 操作元素行内样式
元素.style.样式名
元素.style.样式名 = '样式值'
10.6 获取元素非行内样式
window.getComputedStyle(元素).样式名
10.7 节点操作
document.createElement('标签名称')
父节点.appendChild(子节点)
父节点.insertBefore(要插入的子节点,哪个子节点前面)
父节点.removeChild(子节点)
节点.remove()
父节点.replaceChild(换上节点,换下节点)
节点.cloneNode(是否克隆后代节点)
元素.offsetHeight
元素.offsetWidth
元素.clientHeight
元素.clientWidth
11.事件类型
- 图错误点:contextmenu 是右键单击
事件对象,有函数提供,在函数里面用形参接收即可
补充:
offsetX 和 offsetY 相对于促发事件元素,鼠标的坐标信息
clientX 和 clientY 相对于可视窗口,鼠标的坐标信息
pageX 和 pageY 相对于整个页面文档流,鼠标的坐标信息
2.浏览器相应事件的机制
先从外层传递到里层(事件捕获阶段),最后传出来(事件冒泡阶段)
3.阻止事件传播
事件对象.stopPropagation()
4.事件委托
使用事件对象的target可以知道点击的是哪个元素
ul.onclick = function(e){
if(e.target.tagName === 'LI'){
console.log('你点击的是LI')
}
}
12.面向对象
创建工厂
构造函数 首字母大写 与new连用 (内置构造函数Object)
不要随便return。return基本数据类型无效;return复杂数据类型比如数组,构造函数无效。
function Person(){
this.name = 'jack'
}
var obj = new Person()
如果构造函数里面有函数,每个对象都会新建一个函数
解决方案:使用原型prototype属性,是一个对象。
属性写在构造函数体内,方法写在构造函数的原型上,如果属性不变,也写在原型上
function Person(){}
Person.prototype.sayHi = function(){}
Person.prototype.a = 110
13.原型链
用 "proto"串联起来的对象链状结构
对象访问机制:先去自己身上找,没有就去proto上找,逐级查找 最高级Object的proto,没有就返回undefined
14.ES6
14.1 新增变量命名
ES6以前用var ES6新增let/const
var 函数作用域
14.2 箭头函数
ES6对函数表达式的简写(声明式函数不能使用)就是把function变成=>
var fn1 = function(){}
var fn1 = ()=>{}
var fn1 = function(a){}
var fn1 = a=>{}
var fn1 = function(a,b){return a+b}
var fn1 = (a,b)=> a+b
14.3 解构赋值
let arr[a,b] = ['1','2']
console.log(a)
console.log(b)
let obj = {name:lhd, id:10}
let{name,id} = obj
console.log(name)
console.log(id)
let{name:a} = obj
14.4 模板字符串
可以换行,直接在字符串内解析变量
var str = `ab`
var str = `a
b`
var age = 18
var str = `我今年${age}岁`
14.5 展开运算符
展开数组 = 去除[]
var arr = [1,2,3]
console.log(arr)
console.log(...arr)
var arr = [1,2,3]
var arr1 = [4,5,6]
var arr2 = [...arr,...arr1]
var arr1 = [10,20,5,6]
var max = Math.max(...arr1)
展开对象 = 去除{}
var obj = {name:lhd}
var obj1 = {
id:10,
...obj
}
14.6 类语法
ES6的语法写构造函数,解决之前写构造函数需要分开写的缺点
function Person(name,age){
this.name = name
this.age = age
}
Person.prototype.sayHi = function(){ console.log('hello world')}
Person.a = 100
Person.go = function(){ console.log('go') }
var p1 = new Person('lhd','19')
console.log(p1)
p1.sayHi()
console.log(p1.a)
Person.go()
var p2 = Person('lhd','19')
class Person{
constructor(name,age){
this.name = name
this.age = age
}
sayHi(){ console.log('hello world')}
static a = 100
static go() = function(){ console.log('go') }
}
var p1 = new Person('lhd','19')
console.log(p1)
p1.sayHi()
var p2 = Person('lhd','19')
console.log(Person.a)
Person.go()
15.立即执行函数
立即执行函数前面的语句必须有分号
(function(){
}())
16.请求接口
后端给予接口文档,按照接口文档写
16.1 Ajax
var xhr = new XMLHttpRequest()
xhr.open('GET','XXX',true)
xhr.onload = function(){
console.log(xhr.responseText)
var res = JSON.parse(xhr.responseText)
}
xhr.send()
16.2 GET和POST的区别
GET直接在open函数地址内拼接
xhr.open('GET','xxx?name=lhd&id=10',true)
POST在send函数内写参数,并且要特殊说明
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
xhr.send('name='+lhd+'&id='+age)
16.3 阻止form表单的默认提交行为
loginForm.onsubmit = function(e){
e.preventDefault()
}
17.jQuery
一个大型的简单的第三方类库,对DOM操作进行封装,引入后暴露两个全局变量 $ 和 jquery
17.1 选择器
(返回元素集合)
$('选择器')
17.2 筛选器
$('选择器').筛选器名称()
17.3 操作文本内容
$(‘div’) = 选中div
3.1 html() 等价于原生 JS 的 innerHTML
$('div').html()
$('div').html('你要设置的内容')
$('div').html('<h2>hello world<h2>')
3.2 text() 等价于原生 JS 的 innerText
$('div').text()
$('div').text('hello world')
3.3 val() 等价于原生 JS 中 value
$('input').val()
$('input').val('你要设置的内容')
17.4 操作元素类名
4.1 addClass() 新增类名
$('div').addClass('要添加的类名')
4.2 removeClass() 删除类名
$('div').removeClass('要删除的类名')
4.3 toggleClass() 切换类名
本身有这个类名,那就是删除,如果本身没有这个类名,那就是添加
var btn = document.querySelector('button')
btn.onclick = function(){
$('div').toggleClass('box')
}
17.5 操作元素样式
1.css()
$('div').css('width')
$('div').css('width', '300px')
$('div').css('width', 300)
2.css 批量设置样式
$('div').css({
width:260,
height:320,
'background-color':'purple'
})
17.6 操作元素属性
1.arrt()
$('div').attr('hello')
$('div').attr('hello') = 100
2.removeAttr()
$('div').removeAttr('hello')
3.prop()
$('div').prop('id')
$('div').prop('hello')
$('div').prop('id') = 1
$('div').prop('hello') = 100
4.removeProp()
$('div').prop('hello') = 100
$('div').removeProp('hello')
17.7 获取元素尺寸
1.width()、height()
$('div').width()
$('div').height()
2.innerWidth()、innerHeight()
$('div').innerWidth()
$('div').innerHeight()
3.outerWidth()、outerHeight()
$('div').outerWidth()
$('div').outerHeight()
4.outerWidth(true)、outerHeight(true)
$('div').outerWidth(true)
$('div').outerHeight(true)
17.8 获取元素偏移量
1.offset()
$('div').offset()
2.position()
$('div').position()
17.9 绑定事件
1.on()
1-1 基础绑定事件
$('div').on('click',function(){ console.log('点击div') })
1-2 事件委托绑定事件
$('div').on('click','p',function(){ console.log('点击p') })
1-3 批量绑定事件
$('div').on({
click: function(){ console.log('鼠标点击') }
mouseover: function(){ console.log('鼠标移入') }
mouseout: function(){ console.log('鼠标移出') }
})
2.one()
one() 与 on() 绑定事件的方式一样,区别就是 one() 只能执行一次
2-1 基础绑定事件
$('div').one('click', function(){ console.log('只触发一次') })
2-2 事件委托
$('div').one('click','p', function(){ console.log('只触发一次') })
2-2 批量绑定事件
$('div').one({
click: function(){ console.log('鼠标点击,只触发一次') }
mouseover: function(){ console.log('鼠标移入,只触发一次') }
mouseout: function(){ console.log('鼠标移出,只触发一次') }
})
3.hover()
jQuery 里面一个特殊的事件
$('div').hover(
function (){ console.log('鼠标移入') }
function (){ console.log('鼠标移出') }
)
4.常用事件函数
jQuery 把我们最常用的一些事件,单独做成了事件函数
我们通过调用这些事件函数,来达到绑定事件的效果
如 click(),mouseover(),mouseout(),change() …
$('div').click(function(){ console.log('鼠标点击') })
17.10 事件的解绑和触发
1.off() 事件解绑
1-1 解绑全部事件处理函数
function A() { console.log('A事件处理函数') }
function B() { console.log('B事件处理函数') }
function C() { console.log('C事件处理函数') }
$('div')
.click(A)
.click(B)
.click(C)
$('div').off('click')
1-2 解绑指定事件处理函数
$('div').off('click',B)
2.trigger() 事件触发
$('div').trigger('click')
17.11 基本动画
1.hide() 隐藏动画
2.show() 显示动画
3.toggle() 切换动画
? => 本身如果是显示的,就切换成隐藏
? => 本身如果是隐藏的,就切换成显示
三个函数都有三个参数,分布是运动时间、运动曲线、运动结束后的回调函数
$('div').hide(1000)
$('div').show(1000)
$('div').toggle(1000)
$('div').hide(1000,'linear', function(){ console.log('动画结束') })
$('div').show(1000,'linear', function(){ console.log('动画结束') })
$('div').toggle(1000,'linear', function(){ console.log('动画结束') })
17.12 折叠动画
与上面动画的使用方法一致,只是隐藏和显示的效果不同
基本动画相对于把宽高都同时缩小到左上角,折叠动画则是只改变高度,由下向上缩小
1.slideDown() 隐藏动画
2.slideUp() 显示动画
3.slideToggle() 切换动画
? => 本身如果是显示的,就切换成隐藏
? => 本身如果是隐藏的,就切换成显示
三个函数都有三个参数,分布是运动时间、运动曲线、运动结束后的回调函数
$('div').slideDown(1000)
$('div').slideUp(1000)
$('div').slideToggle(1000)
$('div').slideDown(1000,'linear', function(){ console.log('动画结束') })
$('div').slideUp(1000,'linear', function(){ console.log('动画结束') })
$('div').slideToggle(1000,'linear', function(){ console.log('动画结束') })
17.13 渐隐渐显动画
与上面动画的使用方法一致,只是隐藏和显示的效果不同
相对于改变透明度,让元素慢慢消失
1.fadeIn() 隐藏动画
2.fadeOut() 显示动画
3.fadeToggle() 切换动画
? => 本身如果是显示的,就切换成隐藏
? => 本身如果是隐藏的,就切换成显示
以上三个函数都有三个参数,分布是运动时间、运动曲线、运动结束后的回调函数
4.fadeTo(运动时间,指定透明度,运动曲线,回调函数) 改变元素的透明度为指定值
$('div').fadeIn(1000)
$('div').fadeOut(1000)
$('div').fadeToggle(1000)
$('div').fadeIn(1000,'linear', function(){ console.log('动画结束') })
$('div').fadeOut(1000,'linear', function(){ console.log('动画结束') })
$('div').fadeToggle(1000,'linear', function(){ console.log('动画结束') })
$('div').fadeTo(1000,0.68,'linear',function(){console.log('运动到指定透明度') })
17.14 综合动画函数
animate() 有四个参数
=>第一个:要运动的样式,以一个对象数据类型传递
=>第二个:运动时间
=>第三个:运动曲线
=>第四个:运动结束的回调函数
注意:关于 颜色 和 transform 相关的样式不能运动
$('div').animate({
width:500,
height:600
},1000,'linear',function(){console.log('运动结束')})
17.15 运动结束函数
不停点击按钮使动画变化时,会记录次数,即使你停下来也还在继续变化直到执行完所有次数
1.stop()
=>当任何一个元素执行了stop方法后,会立即结束当前所有运动。
=>目前运动到那什么位置,就停留在什么位置。
=>一般对于结束动画的时候,都是在运动开始之前
$('div').stop()
$("#btn").click(function(){
$('div').stop().toggle(2000)
})
2.finish()
会立即结束当前所有运动,直接去到动画的结束位置
$('div').finish()
$("#btn").click(function(){
$('div').finish().toggle(200)
})
17.16 ajax
语法:$.ajax({ 本次发送 ajax 的配置项 })
配置项:
1.url:必填,表示请求地址
2.method:选填,默认是 GET ,表示请求方式
3.data:选填,默认是 ’ ’ ,表示携带给后端的参数
5.dataType:选填,默认自动识别,表示后端返回给你的数据类型
6.async:选填,默认是 true,表示是否异步
7.success:选填,表示请求成功的回调函数
8.error:选填,表示请求失败的回调函数
$.ajax({
url:'http://localhost:8888/test',
method:'POST',
data:{name:'lhd',id:'19'},
dataType:'JSON',
async:'true',
success:function(res){
console.log(res)
}
})
总结:看视频写笔记养成好习惯
|