Js语法基础
== >= <= - 默认把字符型隐式转换为数值型
+ 为字符拼接
逻辑短路: (与运算):表达式1结果为真,返回表达式2
表达式1为假,返回表达式1
(或运算):表达式1为真,返回表达式1
表达式1为假,返回表达式2
返回能决定结果的表达式或者值
0 “ ”null undefined NaN 结果为false
运算符优先级:()
++ -- !
* / % + -
> >= < <=
== != === !==
&& ||
=
,
Switch 匹配是全等 不加break,接着执行下面case语句
适用于条件判断有具体值;if else适用于范围判断
For双重循环 外层循环一次,里面执行全部。
访问不存在的数组元素返回undefined
新增元素:1.改变数组长度,空元素的值也是undefined
- 追加新索引。
实参多于新参不报错。,没有实参的形参为undefined
Return只返回一个值(最后一个),没有return函数返回undefined
Arguments是函数的内置对象,存储了所有的实参,是伪数组,有length,有索引
函数内部没有声明,直接赋值的为全局变量
全局变量浏览器关闭时才销毁,局部变量在代码块结束时销毁
预解析,变量提升,函数和变量都先提升到当前作用域,
Var a=b=c=1; 等同于 var a=1; b=1;c=1; b,c没有用var声明,在函数内部属于全局变量
构造函数:把对象的公共属性和方法封装到一起
名字首字母大写,不用return就可以返回结果,调用用new,即创建一个新对象
对象属性调用,obj.name obj[“name”],方法为匿名函数,即function(){}
New关键字执行过程:1.在内存中创建一个空对象
2.this指向这个新对象
3.执行构造函数中的代码,给对象添加属性和方法
4.返回新对象
for(var key in obj){
key ---属性名 name
obj【key】 ---属性值 小明
}
内置对象:Math.random()直接使用
Var date=New Date(),先实例化,date.getfullyear()再使用
得到的月份要加1
数字前加0:三元表达式 seconds = seconds < 10 ? “0”+seconds : seconds
时间戳 +new Date() ,1970到当前的总毫秒数
倒计时:求截止时期和当前的时间戳 截止时间-当前时间
New Array(2,3)等同于 【2,3】
判断是否为数组 Array.isArray() a instanof Array
Push()返回新数组长度 均改变原数组
Unshift()也返回新数组长度 (在数组开头添加)
Pop()删除最后一个元素,返回被删除的元素
Shift()删除第一个元素
Splice(index,many) 删除元素,返回被删除的元素 splice(index,many,新元素)
Sort(())排序
Reverse()翻转数组
indexOf()返回数组元素索引,无则返回-1
toString()转为字符串,用,分隔 join()可以指定连接符
Concat()连接数组,浅拷贝
Slice(index,many) 返回被剪切出来的数组
字符串不可变性,改变值,只是改变地址
Str.indexOf()可传入两个参数,第2个为起始的查找索引位置
Str.substr(0,3) 索引,长度 截取字符串
Replace(原字符,替换字符),只能替换满足条件的第一个字符串
Split(连接符)字符串转数组
charAt(索引)
Slice(start,end)索引end取不到,截取字符串
简单数据类型存放在栈中,存放的是值
复杂数据类型在栈中存放地址,地址指向堆,堆中存放数据
BOM
Document.GetElementById()无则返回null
QurraySelect()返回选择器的第一个元素对象
Tab栏切换,排他思想:先干掉所有人,留下我自己
设置自定义属性 setAttribute(“属性”,“值”) data-开头
Children「0」第一个元素子节点。
ParentNode 父节点
创建节点-添加节点 createElement(“li”)- ul.appendChild(“li”)
Ul.insertBefore(lili,ul.children[0])创建最前面的子节点
RemoveChild(“”)删除某个子节点
Href=”javaScript:;”阻止跳转
Node.cloneNode()浅拷贝,只复制节点
Node.cloneNode(ture)深拷贝,节点里面的内容一起复制
Document.write()文档流执行完毕,页面重绘。添加新内容
InnerHTML创建多个元素效率更高(不拼接字符串,使用数组形式拼接 arr.join(),j结构复杂)
CreateElement()创建多个元素效率稍低,但结构清晰
动态生成表格
Element.addEventListener(“click”,function(){},ture)绑定事件ture为捕获阶段 ,默认false,冒泡阶段
删除事件: element.onclick=null removeEventListener(“click”,fn)
Dom事件流:捕获阶段-冒泡阶段
onclick=function(event){} 事件对象:event
e.target 返回点击的元素 ,this返回判定事件的元素
e.preventDefalut() 阻止默认行为事件
e.stopPropagation()阻止事件冒泡
e.pageX返回鼠标再页面的坐标
事件委托:不是每个子节点单独设置事件监听器,而是事件监听器设置在父节点,利用冒泡原理影响设置每个子节点。(例:设置ul ,点击li冒泡到ul的事件)
Keypress 不识别功能键
BOM
Onload 页面加载完
Onresize 窗口变化
setTimeout(function(){},1000)1秒后执行函数,定时器
clearTimeout(timeoutID)清除定时器
回调函数callback():需要等待时间再执行的函数。定时器,onclick等,实现异步。
回调函数原理:函数可以作为一个参数,将这个函数作为参数传到另外一个函数,当函数执行完,再执行回调函数。
setInterval(fn,间隔的毫秒数)重复执行。
This指向:一般指向调用它的
- 全局作用域或者普通函数,定时器,指向windows。
- 构造函数中this指向实例对象,new调用
同步:单线程
异步:同时进行多个任务
JS执行机制:先执行栈中同步任务,再将异步任务(回调函数)放入队列,执行完同步任务,再将异步任务返回执行栈中执行。
事件循环:主线程不断重复获取任务再执行。
Location对象:获取当前页面的url
location.href location.search返回参数
location.assign()跳转页面
Navigator对象:浏览器信息
OffsetTop 得到元素的偏移量,返回不带单位的数值,以带有定位的父亲为准,否则以body。
Offsetwidth 得到元素的宽度,包含padding和border
Offset只读属性
Curson:move 鼠标图形十字键
页面被卷去头部:window.pageYOffse获得,元素被卷去头部是element.scrollTop
Mouseover 经过自身盒子会触发,经过子盒子还会触发,mouseenter只会经过自身盒子触发,不会冒泡
滚动窗口至文档的某位置 window.scroll(x,y) x,y不跟单位。
移动端触屏事件:touchstart 触摸, touchmove滑动 touchend 移开
Ajax 网页和服务器之间的数据交互 无刷新获取数据
Url 统一资源定位符 通信协议 服务器名称 具体存放位置
Get获取资源 post提交资源(例如用户登录信息)
浏览器提供xhr js对象,向服务端发起请求
接口:请求资源地址
请求报文,响应报文:
Ajax请求:js文件
Html文件
Nodemon ...js
可设置网络延时的操作:xhr.timeout 超时时长 xhr.ontimeout=function(){}超时回调 网络异常回调 xhr.onerror=function(){}
取消请求:xhr.abort()
Axios
<script crossorigin=”anonymous” src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
// 设置响应头,设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*")
// 设置所有类型的头信息都可以接收.允许自定义头信息
response.setHeader("Access-Control-Allow-Headers", "*")
// 配置任意方法
response.setHeader("Access-Control-A1low-Method", "*");
Js高级
实例成员:构造函数中,由对象访问
静态成员:由构造函数访问
Prototype:原型对象。一般公共属性放到构造函数中,公共方法放到构造函数的原型对象中,节省内存
Star.prototype的原型._proto_指向Object
call()方法 调用函数,改变函数的this指向,可以实现继承 fn.call(obj) 此时this指向obj,不指向window,若无参数,还是指向windows
Apply(),与call()类似,但传的参数以数组(伪数组)的形式 fn.apply(o,[“pink”])
Bind() 不会调用函数,可以改变原来函数的this指向,返回新的函数
ES6通过类实现面向对象编程
数组新方法:forEach(function(value,index,array){})遍历数组,array为数组本身
Filter(function(value,index,array){return value>2})筛选数组,直接返回一个新数组
Some(function(value,index){ return ture})查找数组中是否有满足条件的元素,返回布尔值,找到第一个则返回。
Trim()去除字符串两边空格
Object.defineProperty(obj,“value”,{value:10}),修改或新增对象的属性,第三个参数可写,writable:false,则该属性不可更改
Object.keys(obj)获取对象的属性名放在一个数组中
严格模式:use strict 可给整个脚本或者单个函数使用
- 变量必须先声明再调用
- 不能随意删除已经声明好的变量
- 全局作用域中函数this指向undefined
- 构造函数不加new调用,this报错
- 定时器this还是指向window
- 函数中的参数不允许重明
高阶函数:使用函数作为参数或返回一个函数的高阶函数
闭包:指有权访问另外一个函数作用域变量的函数。
一个作用域可以访问另外一个函数中的局部变量
变量在的函数称为闭包函数
作用:延伸变量的作用范围
递归函数:一个函数在内部调用自己
浅拷贝:深层次对象拷贝的是引用地址,拷贝的深层次数据改变会影响原来的。 语法糖:Object.assign(new,old)
深拷贝:
正则表达式:var reg=// reg.test(str)
/abc/ 只要包含abc就可以
/^abc$/ 精确匹配,abc开头和结尾
/[abc]/ 只要匹配【abc】中的一个就可以
-范围符
[^]取反
* 次数大于等于0
+ 次数大于等于1
? 1/0
{3} 次数为3
{3,} 次数大于等于3
ES6
let
声明的变量只在所处的块级域中有效({}块级域)
不存在变量提升
暂时性死区 var num=10;
If(true){
Console.log(num);
let num;
}
此时报错,因为num在if{}由let声明,与外面的num无关
const
- 声明常量,块级作用域
- 声明时需赋值
- 常量赋值后不能修改
数组 对象解构
箭头函数: const fn =()=>{} 函数体为一句返回值,{}可以省略
形参只有一个时,()可省略 const fn = a =>a
没有自己的this,指向定义区域的this
This指向obj的作用域,但对象不产生作用域,此时say()定义在window上
剩余参数:..args
扩展运算符:可以将数组或对象转为用逗号分隔的参数序列
- 合并数组[...arr1,...arr2] 或者 arr1.push(...arr2)
- 将伪数组转为数组 [...lis] 或者 Array.from(lis) 可以传入函数,将item进行处理
Array的扩展方法:arr.find((item,index)=>{})查找数组中第一个满足条件的值,无则返回undefined
arr.findIndex()查找数组中一个满足条件的索引
arr.includes() 返回布尔值
模板字符串 ` 字符串` 可以解析变量 ${name} 相当于+name+
可以调用函数 ${ fn() } 显示函数的返回值
String的扩展方法:str.startsWith() 判断字符串是否以某参数开头 str.endWith()
str.repeat(n),返回重复n次的新字符串
Set数据结构:类似数组,没有重复的值 const s=new Set([“a”,”a”,”b”]); s.size=2
给数组去重 arr=[...s]
遍历set,forEach()
标签:返回,函数,指向,对象,元素,笔记,js,学习,数组 From: https://www.cnblogs.com/yuro12138/p/17273098.html