获得徽章 0
#每天一个知识点# day19
什么是跨域及解决方法
跨域:
拿当前HTML页面的地址和在页面中AJAX请求的API地址做比较:
如果两个地址的协议域名端口号都相同,相当于HTML页面从同一个源下根据某个地址获取数据,属于“同源策略请求”,基于AJAX是可以直接请求到数据的!
如果三者(协议域名端口号)只要有一个不一样,那么就是“非同源策略请求(跨域请求)”,使用AJAX不能直接获取数据了!
方案:
方案一:JSONP
在客户端AJAX不允许直接的跨域请求,但是很多东西都可以直接的跨域,例如:script、link、img、iframe等(这些标签的SRC或者HREF设置任何一个资源请求地址,哪怕是其它源下的,也都没有跨域的限制,直接可以把内容获取到 [除非服务器做特殊处理了] =>针对这个特点,真实项目中某些JS文件加载的都是CDN地址)
方案二:CORS 跨域资源共享
主要是服务器设置:配置允许跨域的相关头部信息
客户端:
axios.defaults.withCredentials = true;
//=>xhr.withCredentials=true
axios在某些特定场景下,在发送真实请求之前都会发送一个预请求(OPTIONS)格式的,来验证是否允许跨域
弊端:只能指定一个允许源(不能用通配符和指定多个源),所以目前真实项目中基于CORS实现跨域资源共享是主流方案
方案三:WEBPACK代理(webpack proxy)
1. 安装webpack-dev-server
2. 配置代理:
在CREATE-REACT-APP脚手架中,我们只需要在package.json中设置porxy代理属性,属性值是目标服务器的地址;在客户端发送请求的时候,请求的接口先保证是同源,如果当前源下没有这个接口,没关系,基于dev-server使用webscoket已经把目标代理服务器上的对应接口数据获取到了,所以直接请求同源下没有的接口,也可以获取数据!
方案四:ngnix反向代理
方案五:node作为中间件代理
展开
评论
#每天一个知识点# day18
ES6中export与exportdefault差异总结
exportdefault在一个模块中只能有一个,但是 export可以有多个。
通过export导出的(属性或者方法)可以修改,但是通过exportdefault导出的是不可修改的。
export vare1=…是合法语句,但是export default vare2=…是不合法的(let和const也一样)。
展开
评论
#每天一个知识点# day17
js中call、apply、bind的区别
都是用来改变某一个函数中THIS关键字指向的
用法:
 call
   [fn].call([this],[param]...)
   fn.call:当前实例(函数FN)通过原型链的查找机制,找到Function.prototype上的call方法  =>function call(){[native code]}
   fn.call():把找到的call方法执行

   当call方法执行的时候,内部处理机制
    1.首先把要操作函数中的THIS关键字变为CALL方法第一个传递的实参值
    2.把CALL方法第二个及第二个以后的实参获取到
    3.把要操作的函数执行,并且把第二个以后的传递进来的实参传给函数
 apply
 和call基本上一模一样,唯一区别在于传参方式
   fn.call(obj,10,20)
   fn.apply(obj,[10,20]) APPLY把需要传递给FN的参数放到一个数组(或者类数组)中传递进去,虽然写的是一个数组,但是也相当于给FN一个个的传递
 bind
 语法和call一模一样,唯一的区别在于立即执行还是等待执行
   fn.call(obj,10,20) 改变FN中的THIS,并且把FN立即执行
   fn.bind(obj,10,20) 改变FN中的THIS,此时的FN并没有执行(不兼容IE6~8)
展开
评论
#每天一个知识点# day16
JS中函数的运作机制:
【创建函数】
1. 函数是引用类型值,首先开辟一个新的堆内存(16进制地址)
2. 把函数体中实现功能的代码“当做字符串”存储到堆内存中
3. 然后把堆内存的引用地址赋值给函数名(变量名)
【执行函数】
目的:把函数体中的JS代码执行,以此实现具体的功能和需求
1. 首先开辟一个新的栈内存(私有作用域),提供JS代码执行赖以生存的环境
2. 把原有在堆内存中存储的“字符串”复制过来,放到新的栈内存中,自上而下执行
展开
评论
#每天一个知识点# day15
JS中Promise用法:
Promise是异步编程的一种解决方案,是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法;但并不是完全的同步,当执行resolve或者reject的时候,此时是异步操作,会先执行then/catch等
展开
Janice_j于2023-06-29 10:56发布的图片
评论
#每天一个知识点# day14
Vue中Computed和Watch的区别
computed:计算属性,基于data中或props 中的数据计算出一个新的值,如果基于的数据改变,会重新计算。
watch:监听数据的变化,并可执行一些逻辑操作。
区别
computed:
1、初始化时就调用;
2、在 computed 属性对象中定义计算属性的方法,用法和操作data中的数据一样
3、如果属性值是get和set函数,当数据变化时,调用 set 方法。get 方法必须要有一个返回值,函数的返回值就是属性的属性值
4、有缓存机制,即使重复调用,只要依赖数据不变,会取缓存中的计算结果,只有依赖的数据改变才会重新计算
watch:
1、主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作,可以看作是 computed 和 methods 的结合体
2、可以监听的数据来源:data,props,computed内的数据
3、支持异步
4、不支持缓存,只要监听的数据改变,就会触发相应的操作
展开
评论
#每天一个知识点# day13
常用的js动态操作DOM的方法
1、document.createElement:创建元素节点
2、document.createDocumentFragment:创建空的 DocumentFragment 对象,并返回此对象。
3、elment.appendChild:为元素添加一个新的子元素
4、elemet.insertBefore:现有的子元素之前插入一个新的子元素
5、element.cloneNode(true/false):克隆某个元素(深拷贝/浅拷贝)
6、elemnt.removeChild: 删除一个子元素
7、element.set/get/removeAttribute:设置或者改变指定属性节点。
展开
评论
#每天一个知识点# js获取元素或者元素集合的方法
1.document.getElementById
1)上下文只能是document(只有document这个实例的原型链上才能找到这个方法,其它实例都找不到)
2)ID重复了获取第一个
3)IE6~7中会把表单元素的name当做id使用
2.document.getElementsByTagName
1)获取当前上下文中,所有子子孙孙中标签名叫做XXX的元素
3.document.getElementsByClassName
1)IE6~8中不兼容
4.document.getElementsByName
1)在IE浏览器中只对表单元素的name起作用
2)上下文也只能是document
5.document.querySelector
6.document.querySelectorAll
1)不兼容IE6~8
2)没有DOM映射
7.document.documentElement
8.document.body
9.document.head
展开
评论
jym,移动端现在用什么技术好写点
5
#每天一个知识点# Vue中的nextTick的作用
nextTick是Vue 提供的一个异步方法,用于在 DOM 更新后执行一些操作。由于 Vue 是响应式的,当数据改变时,它会异步地执行DOM更新。如果你想在DOM更新后进行一些操作,可以把这些操作放在nextTick的回调函数中。
评论
#每天一个知识点# call、aplly、 bind的区别
相同点:都可以修改函数的this指向
不同点:
1.传参方式不同,call用于单个参数,apply参数必须是数组
2.call和apply,修改函数的this指向,并立即调用函数 3.bind,也可以修改函数的this指向,但不调用函数
展开
评论
#每天一个知识点# js闭包机制理解:
函数执形成一个私有的作用域,保护里面的私有变量不受外界的干扰,
或者说是形成一个不销毁的私有作用域(私有栈内存)
评论
#每天一个知识点#
JS中的内存分为堆内存和栈内存
堆内存:存储引用数据类型值(对象:键值对 函数:代码字符串)
栈内存:提供JS代码执行的环境和存储基本类型值
评论
#每天一个知识点#
js中this的理解:
1.元素绑定事件,方法中的this是当前操作的元素
2.方法名前面是否有点,有点,点前面是谁this就是谁,没有this是window(严格模式下是undefined)
3.构造函数执行,方法体中的this是当前类的一个实例
评论
#每天一个知识点#
JSON.parse:将JavaScript对象表示法的JSON字符串转换为对象(字符串转对象)
JSON.stringify:将 JavaScript json对象转换为JavaScript对象表示法的JSON字符串(对象转为字符串)
评论
element-plus好多组件都不支持ssr,需要用<client-only></client-only>包裹起来,一般有弹出框的组件都需要包裹
评论
小知识:
原来P标签是不能嵌套块标签的
评论
jym,vite-ssr与nuxt哪个好用点
4
vue3的bug有遇到过吗,如果一个路由里有阻塞住的请求或定时器,这时切换到另一个路由会报找不到parent[尴尬]
评论
大家都用vue3+ts了吗,ts难吗[困]
8
下一页