赞
踩
变量持久化(闭包中的变量不会被回收)
跨域是指浏览器为了安全做的同源策略,协议,端口,域名三者其中一种不同都是跨域
script
标签没有跨域限制的特性,并提供一个回调函数,回调函数的名称为callbackCookie、session和localStorage的区别 cookie的内容主要包括:名字、值、过期时间、路径和域。路径与域一起构成cookie的作用范围。若不设置时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就会消失。这种生命期为浏览器会话期的cookie被称为会话cookie。 会话cookie一般不存储在硬盘而是保存在内存里,当然这个行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再打开浏览器这些cookie仍然有效直到超过设定的过期时间。对于保存在内存里的cookie,不同的浏览器有不同的处理方式session机制。 当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
navigator.userAgent.match
这个api配合正则来判断,这个方法会返回一个只读字符串- methods: {
- // 添加判断方法
- isMobile() {
- let flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
- return flag;
- }
- },
- mounted: {
- if(this.isMobile) {
- alert("移动端");
- this.$router.replace('/pc_index');
- }else {
- alert("pc端");
- this.$router.replace('/m_index');
- }
- }
- 当new Vue()后,首先会初始化事件和生命周期,接着会执行beforeCreate生命周期钩子,在这个钩子里面还拿不到this.$el和this.$data;接着往下走会初始化inject和将data的数据进行侦测也就是进行双向绑定;接着会执行create钩子函数,在这个钩子里面能够拿到this.$data还拿不到this.$el;到这里初始化阶段就走完了。然后会进入一个模版编译阶段,在这个阶段首先会判断有没有el选项如果有的话就继续往下走,如果没有的话会调用vm.$mount(el);接着继续判断有没有template选项,如果有的话,会将template提供的模版编译到render函数中;如果没有的话,会通过el选项选择模版;到这个编译阶段就结束了。(温馨提示:这个阶段只有完整版的Vue.js才会经历,也是就是通过cmd引入的方式;在单页面应用中,没有这个编译阶段,因为vue-loader已经提前帮编译好,因此,单页面使用的vue.js是运行时的版本)。模版编译完之后(这里说的是完整版,如果是运行时的版本会在初始化阶段结束后直接就到挂载阶段),然后进入挂载阶段,在挂在阶段首先或触发beforeMount钩子,在这个钩子里面只能拿到this.$data还是拿不到this.$el;接着会执行mounted钩子,在这个钩子里面就既能够拿到this.$el也能拿到this.$data;到这个挂载阶段就已经走完了,整个实例也已经挂载好了。当数据发生变更的时候,就会进入更新阶段,首先会触发beforeUpdate钩子,然后触发updated钩子,这个阶段会重新计算生成新的Vnode,然后通过patch函数里面的diff算法,将新生成的Vnode和缓存中的旧Vnode进行一个比对,最后将差异部分更新到视图中。当vm.$destory被调用的时候,就会进入卸载阶段,在这个阶段,首先触发beforeDestory钩子接着触发destoryed钩子,在这个阶段Vue会将自身从父组件中删除,取消实例上的所有追踪并且移除所有的事件监听。到这里Vue整个生命周期就结束了。
-
- 作者:时樾1998
- 链接:https://juejin.im/post/5e80a179f265da47e84e5c06
-
vm.$on,vm.$off,vm.$once,vm.$emit
?实现原理是什么?javascript:
(伪协议)等可执行代码- function sort (arr){
- let len = arr.length
- if(len > 1) {
- for(let i = 0; i < len - 1; i++ ) {
- for(let j = 0; j < len - 1 - i; j++ ) {
- if(arr[j] > arr[j+1]) {
- let temp = arr [j + 1]
- arr[j + 1]= arr[j]
- arr[j] = temp
- }
- }
- }
- }
- return arr
- }
- <transition name = "fade">
- <p v-show = "show" v-bind:style = "styleobj">动画实例</p>
- </transition>
- v-enter:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。
-
- v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。
-
- v-enter-to: 2.1.8版及以上 定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter 被移除),在过渡/动画完成之后移除。
-
- v-leave: 定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。
-
- v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。
-
- v-leave-to: 2.1.8版及以上 定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave 被删除),在过渡/动画完成之后移除。
-
- 作者:Zero游戏人生丶
- 链接:https://juejin.im/post/5b460af95188251af45eeafb
transition-group
组件包裹,与上方的transition用法一致
- function b(){
- var a=1;
- };
-
- function b(){
- var a=1;
- return ()=>{
- a++;
- return a;
- }
- };
- let c = b();
- c(); //2
- c(); //3
- c(); //4
-
- 作者:苏南
- 链接:https://juejin.im/post/5ba6e77e6fb9a05d0b14359b
c(); //2
- <body class="container">
- <table id="table">
- <tr><td>1</td><td>3</td><td>3</td><td>4</td><td>5</td></tr>
- <tr><td>1</td><td>3</td><td>3</td><td>4</td><td>5</td></tr>
- <tr><td>1</td><td>3</td><td>3</td><td>4</td><td>5</td></tr>
- …………
- </table>
- <script>
- let table =document.querySelector("#table");
- table.addEventListener("click",(e)=>{
- let {nodeName} = e.target;
- if(nodeName.toUpperCase() === "TD"){
- console.log(e.target);//<td>N</td>
- }
- },false);
-
- </script>
- </body>
-
- 作者:苏南
- 链接:https://juejin.im/post/5ba6e77e6fb9a05d0b14359b
- <script>
- let str = "12qwe345671dsfa233dsf9876ds243dsaljhkjfzxcxzvdsf";
- let array = str.split(""); //split() 方法使用指定的分隔符字符串将一个
- // String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。
-
- //方案一:
- **array = [...n**ew Set(array)].join(""); //
- array = ((a)=>[...new Set(a)])(array).join("");
- console.log(array);//12qwe34567dsfa98ljhkzxcv 只能过滤,不会统计
-
- //方案二:
- function unique (arr) {
- const seen = new Map()
- return (arr.filter((a) => !seen.has(a) && seen.set(a, 1))).join("");
- }
- console.log(unique(array)) // 12qwe34567dsfa98ljhkzxcv
-
- //方案三:
- function unique (arr) {
- let arrs=[];
- var news_arr = arr.sort();//排序能减少一次循环
- for(var i=0;i<news_arr.length;i++){
- if(news_arr[i] == news_arr[i+1] && news_arr[i]!= news_arr[i-1] ){
- arrs.push(arr[i]);
- };
-
- };
- return arrs.join("");
- }
- console.log(unique(array)) // 12qwe34567dsfa98ljhkzxcv
-
- //方案四:
- function unique (arr) {
- let obj={};
- for(var i=0;i<arr.length;i++){
- let key = arr[i];
- if(!obj[key] ){
- obj[key]=1;
- }else{
- obj[key]+=1;
- }
-
- };
- return obj;
- }
- console.log(unique(array)) // object 对应每个key以及它重复的次数
-
- </script>
-
- 作者:苏南
- 链接:https://juejin.im/post/5ba6e77e6fb9a05d0b14359b
input type="file" id="file" / >
f=document.getElementById('file').files[0];
url=URL.createObjectURL(f)
f = new FormData()
imgInfo = document.getElementById('img').files[0]
f.append('img',imgInfo)
$ajax({data:f})
https://juejin.im/post/5c984610e51d45656702a785
具体学习地址,面试也不用全部回答Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。