js原生的DOM Math Date操作 以及数组的全局方法和字符串的全局方法

常用的Math内置对象

//Math内置对象
			Math.abs()//返回绝对值
			Math.ceil()//向下取整
			Math.floor()//向下取整
			Math.round()//四舍五入
		    Math.max(x,y)//取最大
			Math.min(x,y)//取最小
			Math.pow(x,y)//值为x的y次方
			Math.random()//随机数0-1
			Math.PI //π

Date对象

			var a = new Date()
			// 实例化一个Date对象:返回的时间点是此时此刻,并且不随着时间的移动和自动更新。
			a.getFullYear()// 返回年份
			a.getMonth() + 1// 返回月份:从0开始
			a.getDate()// 返回日
			a.getDay()// 返回星期几:星期天会返回0
			a.getHours()// 时
			a.getMinutes()//分
			a.getSeconds()//秒
			//计算两个时期相隔时期

document的内置对象

			getElementById(id名) //根据id寻找元素,并返回Node节点
			getElementsByTagName(标签名)//根据标签获取元素,并返回NodeList节点列表
			getElementsByClassName()//根据类名获取元素,返回NodeList
			querySelectorAll()//根据css选择器返回元素,返回NodeList
			querySelector()//根据css选择器返回元素,返回Node
			createElement("标签")//创造并返回一个页面中不存在的Node节点

Node节点

       		className//设置或返回元素的class属性的属性值
			innerHTML//设置或返回元素的开始标签与结束标签之间的内容
			value//设置或返回文本框与文本域的内容
			setAttribute(key,value)//设置元素的自定义属性
			getAttribute(key)//获取元素的自定义属性的属性值
			getElementsByTagName()
			getElementsByClassName()
			nextElementSibling//返回下一个紧邻的兄弟节点
			previousElementSibling//返回上一个紧邻的兄弟节点
			parentNode//返回父级节点
			children//找子级元素
			firstElementChild//返回第一个元素子节点
			lastElementChild//返回最后一个元素子节点
			nodeType//节点类型:1元素节点,3文本节点,8注释节点,9document
			nodeName//返回该元素节点的标签名(大写字符串)
			remove()//删除元素
			appendChild()//插入到结束标签之前
			insertBefore(插入的元素,参照物)
			cloneNode(true)//复制一个元素的副本
			style//设置/获取一个元素的行内样式

计时器

           //只执行一次
			setTimeout(function(){
				},3000)
			setTimeout(fn,3000)
			document.getElementById("start").onclick、= function(){
				time = setTimeout(function(){
				},3000)
			}
			document.getElementById("stop").onclick = function(){
				clearTimeout(time)
			}
			// setInterval(function,时间)  每个时间参数的毫秒数就调用一次参数1的函数
			document.getElementById("start").onclick = function(){
				time = setInterval(function(){
				},1000)
			}
			document.getElementById("stop").onclick = function(){
				clearInterval(time)
			}

事件

			//帮助用户触发某个元素的事件:Node.去on的事件名()
			onclick//点击
			onmouseenter//当鼠标划上的时候
			onmouseleave//当鼠标离开的时候
			onfocus//获得焦点
			onblur//失去焦点
			onmouseover//点击时内部的元素也会被触发
			onmouseout//鼠标离开时执行			
			onmousedown//鼠标按下时执行
			onmouseup//鼠标松开时执行
			onmousemove//鼠标滑过时执行
			which //检测触发事件的建码 ,1左3右2中
			onkeydown//用户按下一个键盘键时触发(全键)
			onkeyup//用户松开键盘时触发
			onkeypress //忽略掉功能键版的onkeydown 
			onchange //每次改变的时候出发的事件
			oninput //文本框输入东西触发
			window.onscroll//滚动条改变的距离
			selectedIndex//下拉选择菜单的Node节点独有的属性,代表当前选择项对于其他项所处的下标
			keycode //keycode绑定键盘
			document.body.clientWidth //获取页面的宽度:
		  	document.body.clientHeight //获取页面的高度:
		  	clientY clientX//相对于游览器左上角的距离
			offsetY offsetX //相对于绑定事件的左上定点
			offsetTop offsetLeft//当前的位置相对于屏幕的位置
			screenY screenX//相对于屏幕的左上角
			return false//阻止浏览器默认行为事件处理函数里
监听
 window.addEventListener()
目标的css中加:pointer-events: none; 防止抖动

数组的全局方法

* 往后插 Array.push(新元素)
* 往前插 Array.unshift(新元素)
* 删除/添加 Array.splice(起始位置,被删除的数量,新增的元素)
* 删除开头的 Array.shift()
* 删除最后一位 Array.pop()
* 颠倒数组 Array.reverse()
* 数组拼接 Array.concat()
* 将数组转换为字符串 Array.join(分隔符) 
* 切割数组 Array.slice(起始下标,终止下标)
ES6新增
*find()传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它,并且终止搜索。
*findIndex()传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它的下标,终止搜索。
 // every 数据方法 会遍历 会接受回调函数,每个回调函数都为true。那么every方法返回true
    // 如果是空数据调用every就是true
    const allChecked=cart.length?cart.every(v=>v.checked):false
    this.setData({

字符串的全局方法

* 根据下标返回字符 charAt()
* 字符串拼接 concat()
* 根据字符找下标 indexOf() lastIndexOf()
* 替换字符 replace()  如果要全局匹配 `String.replace(/被替换字符/g,替换的新字符)`
* 根据起始和终止下标切割字符串 slice() substring()
* 根据起始位置和个数切割字符串 substr()
* 根据字符将字符串切割成长度若干的数字 split()

面向对象

面向对象:OOP :分析解决问题的步骤,使用函数的方式一步步实现,使用的时候依次调用即可

把大象关进冰箱分为几步

1.分析步骤

​ (1)打开冰箱

​ (2)大象放进去

​ (3)关门

oop与现面向过程区别

面向过程

优点 性能比oop高

缺点 没有面向对象在后期方便维护 扩展性不高

oop

优点 后期方便维护 扩展性高

缺点 性能比面向过程低

类与对象

类: 就是对有相同的属性和行为的对象的集合

对象: 就是根基类的属性和行为的实例化(真是存在的)

总结

面向对象:就是传造出一个机器 用这个机器快速的创建出一个有属性(变量)有方法(函数)的对象

创建对象的方式?

(1)字面量方式

   // 1.字面量
        let user={
            uname:"huanghuang",
            uage:42,
            sex:"男",
            love:"女",
            showname(){
                console.log("我是一个方法");
            }
        }
        console.log(user.uage)

缺点 :字面量方式是定义对象的简写形式,在创建多个的时候非常麻烦

(2)Object构造器

    let demo=new Object()
        demo.name="宝贝";
        demo.home=()=>{
            console.log("跪下给我换拖鞋");
        }
        console.log(demo.name)

缺点 如果我像创建对各对象 那么必须每一次都需要new 然后在逐一添加属性和方法 会有大量的冗余代码。

(3) 工厂函数创建对象

      // 3工厂函数方式创建
        // 1.创建工厂
        function sicong(){
            // 2.创建出一个空对象
            let obj={}
            obj.name="sicong",
            obj.tedian=()=>{
                console.log("有钱");
            }

            // 3返回
            return obj
        }

        let demo=sicong()
        console.log(demo.name)

缺点:不够灵活 每次都是相同属性和方法的内容

(4)构造函数方式创建

  // (4)构造函数
        // 特点1:函数的首字母大写(用来区分普通函数)
        function CreateUser(name){
            // 特点2:this指向 指向的创建实例化之后的变量(new 之前的变量)
            this.name=name
        }
        // 怎么使用构造函数?
        // 特点3 必须使用new关键字来创建
       let demo= new CreateUser("LV")
       console.log(demo.name)

特点:灵活我们可以使用工造函数按照需要创建出指定的对象

什么是构造函数

构造函数的目的

可以非常方便的创建出一个有属性有方法的对象

特点

1.首字母大写

2.内部的this指向的是生成出来的对象

3.必须使用new关键字创建

(3-1)注意不使用new会怎么样?


        function CreateUser(name){
         
            this.name=name
        }
    
        // 不使用new关键字 是构造函数错误的使用方式  硬要不用new只会出现undefined
       console.log(CreateUser("LV"))

特点延续

注意: 构造函数创建出来的内容是什么?实例对象

注意2:在创建实例对象的过程叫什么?实例化

注意3:构造函数中不能有return?可以有 但是写了没有用白写

       function CreateUser(){
         
            return "我是构造函数return的字符串"
        }
    
        console.log(new CreateUser())

注意4 我们每次实例化的时候 new 构造函数的名字() 来创建 但是注意 如果不传参数的时候()可以省略

  function CreateUser(){}
    
        console.log(new CreateUser)

ajax实现异步通信

ajax是什么?

异步的(async) javascript and xml :就是利用javascript和xml实现实现客户端与服务器之间进行异步的数据交换。

什么是异步什么是同步?

同步:阻塞代码

异步:非阻塞代码

为什么学习ajax?

1.无刷新 不会刷新曾哥页面 而是指刷新指定区域

2.可以给用户提供连续的使用感受

传统的web应用和ajax有什么差异?

1.发送请求方式的不同

(1)传统的:只能发送同步请求

(2)ajax的:使用ajax引擎 进行异步操作的发送

2.服务器响应不同

(1)传统的:就是会响应一个完整的页面

(2)ajax的:给我们响应的是我们需要的数据

3客户端处理不同

(1)传统的:等待着服务器相应给我们的页面我们进行加载处理

(2)ajax的:通过各种数据的操作进行数据展示

ajax创建流程

          // 1.实例化ajax对象
          let xhr = new XMLHttpRequest();
          // 2.设置连接配置(设置请求参数信息)
            // xhr.open(“请求方式(get post put delete patch)”,请求地址,是否异步 默认是true异步 false同步)
            	xhr.open("GET","http://api.artgoer.cn:8084/artgoer/api/v1/user/324380/v3/topic/topicHomeByLabel?pageIndex=1&token=b544cd63-6d42-46fe-a96c-3cf96bae3113&topicId=62187")
           // 3.send()发送请求
            xhr.send()

4.监听请求状态

​ 4-1:readyState 状态值:判断XMLHttpRequest对象 的状态信息(浏览器和服务器之间交互到哪一步了)

​ 状态值:0-4共计5步

​ 0:请求还没有开始 (未初始化)

​ 1:服务器已经建立了连接

​ 2:请求已经接收

​ 3:请求处理中

​ 4:请求处理完毕并且响应已经就绪

    // 1.实例化ajax对象
          let xhr = new XMLHttpRequest();
            // 2.设置连接配置(设置请求参数信息)
            // xhr.open(“请求方式(get post put delete patch)”,请求地址,是否异步 默认是true异步 false同步)
            xhr.open("GET","http://api.artgoer.cn:8084/artgoer/api/v1/user/324380/v3/topic/topicHomeByLabel?pageIndex=1&token=b544cd63-6d42-46fe-a96c-3cf96bae3113&topicId=62187")
            // 3.send()发送请求
            xhr.send()

            // 4.监听请求状态
            // onreadystatechange他会在状态值2 3 4步的时候执行
            // xhr.onreadystatechange=()=>{
            //     console.log(xhr.readyState)
            // }

            // onprogress他会在状态值 3 步的时候执行
            // xhr.οnprοgress=()=>{
            //     console.log(xhr.readyState)
            // }
            // onload他会在状态值 4 步的时候执行
            xhr.onload=()=>{
                console.log(xhr.readyState)
            }

status状态码

就是一个请求过程中的各种状态的提示信息

        // 1.实例化ajax对象
          let xhr = new XMLHttpRequest();
            // 2.设置连接配置(设置请求参数信息)
            // xhr.open(“请求方式(get post put delete patch)”,请求地址,是否异步 默认是true异步 false同步)
            xhr.open("GET","http://api.artgoer.cn:8084/artgoer/api/v1/user/324380/v3/topic/topicHomeByLabel?pageIndex=1&token=b544cd63-6d42-46fe-a96c-3cf96bae3113&topicId=62187")
            // 3.send()发送请求
            xhr.send()

            // 4.监听请求状态
            // onreadystatechange他会在状态值2 3 4步的时候执行
            // xhr.onreadystatechange=()=>{
            //     console.log(xhr.readyState)
            // }

            // onprogress他会在状态值 3 步的时候执行
            // xhr.οnprοgress=()=>{
            //     console.log(xhr.readyState)
            // }
            // onload他会在状态值 4 步的时候执行
            xhr.onload=()=>{
                console.log(xhr.readyState)
                if(xhr.status==200){
                    console.log(xhr.responseText)
                }
            }
        }

兼容性

低版本IE 6 IE5 低版本没有办法使用XMLHttpRequest()

在低版本IE中需要使用 ActiveXobject(“Microsoft.XMLHTTP”)

    // 兼容性配置
            if(window.XMLHttpRequest){
                xhr = new XMLHttpRequest(); 
            }else{
                xhr=new ActiveXObject("Microsoft.XMLHTTP")
            }

ui框架

在我们三阶段学的这些vue.js react.js umi.js dva.js node.js 也是框架 他们统称js框架

ui框架 bootstrap elementui vantui …

bootstrap

是一个第三方的 所以要使用先下载

下载方式 今后所有的第三方库 希望大家都用npm管理 (要使用npm 那么你的电脑上必须要有node)

1.打开cmd 在cmd中cd 你的项目路径(把cmd的路径切换到你的项目上)

2.初始化 npm init -y

3.下载 npm install --save bootstrap@3.3.7 但是下载的时候会发现好慢呀 怎么办?可以使用淘宝镜像 安装:npm install -g cnpm --registry=https://registry.npm.taobao.org

暂存性死区

primise

<!-- 	js中会有大量的异步操作   但是这些异步操作中可能会出现层层嵌套的问题(回调地狱)   不会有错但是 后期在维护的时候非常的麻烦
	
	使用promise 可以很好的解决回调地狱的问题  让代码的可读性便的非常之高
	
	
	promise 有三个状态    pending 等待状态    resolve成功状态    reject失败状态 -->
	
	<script type="text/javascript">
		
		
		
		
		
	let ajaxDemo=new Promise((resolve,reject)=>{
		// 异步操作放进来\
				$.ajax({
					url:"http://api.artgoer.cn:8084/artgoer/api/v1/user/324380/v3/topic/topicHomeByLabel?pageIndex=1&token=b544cd63-6d42-46fe-a96c-3cf96bae3113&topicId=62187",
					type:"GET",
					dataType:"json",//预计返回类型
					success(ok){
						resolve(ok)
					}
				})
		})
		// ajaxDemo 是一个promise对象    当得到这个promise对象之后  我们想取出promise对象的成功返回值
		// Promise对象 的成功返回值是通过then获取的  catch对应的是失败的
		ajaxDemo.then((xiaoming)=>{
			console.log(xiaoming)
		})

事件循环

js在最初设计的时候就是单线程的。但是在处理一些等待事件较长的操作时(比如有:异步请求)
所以js必须要有异步 。js通过事件循环来实现异步 这也是js的运行机制。

分类

遇到同步任务直接执行

遇到异步任务分类为宏任务(macro-task)和微任务(micro-task)。

什么是宏任务微任务

宏任务(macro-task):setTimeout,setInterval等

微任务(micro-task):promise

总结与原理

有微则微,无微则宏
先执行同步代码,遇到异步宏任务则将异步宏任务放入宏任务队列中,遇到异步微任务则将异步微任务放入微任务队列中,当所有同步代码执行完毕后,再将异步微任务从队列中调入主线程执行,微任务执行完毕后再将异步宏任务从队列中调入主线程执行,一直循环直至所有任务执行完毕。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值