十大排序算法 https://www.cnblogs.com/beli/p/6297741.html
1.全局的钩子
2.单个路由独享的钩子
3.组件级的钩子
Vue实现响应式并不是数据发生变化之后DOM立即变化,而是按一定的策略进行DOM的更新。$ nextTick是在下次DOM更新循环结束之后执行延迟回调,在修改数据之后使用$ nextTick,则可以在调整这样一种场景,你有一个jQuery插件,希望在DOM元素中某些属性发生变化之后重新应用该插件,这时候就需要在$ nextTick的回调函数中执行重新应用插件的方法。
provide 和 inject 主要为高阶插件/组件库提供用例。并不推荐直接用于应用程序代码中。
定义说明:这对选项是一起使用的。以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。
简单的来说就是在父组件中通过provider来提供变量,然后在子组件中通过inject来注入变量。
需要注意的是这里不论子组件有多深,只要调用了inject那么就可以注入provider中的数据。而不是局限于只能从当前父组件的prop属性来获取数据。
主动类是VUE路由器模块的路由器连接组件中的属性,用来做选中样式的切换
一个承诺可能有三种状态:等待(待定),已完成(满足时),已拒绝(拒绝)
详见https://blog.csdn.net/Web_J/article/details/84592827
详见https://blog.csdn.net/Web_J/article/details/83900073
页面加载时,大致可以分为以下几个步骤:
触发的事件
window load事件(所有的资源全部加载完成会触发window的加载事件。)
P3P全称 隐私首选项对话对话平台个人文库个人文库,隐私设定平台规范。这个规范极其复杂,若要讲清楚,天都黑了一半。简言之,就是网站向浏览器声明自己的隐私政策,比如网站是否搜集访问者的个人信息,设置的cookie的用途等等浏览器会依据设置,决定在第三方请求的条件下是否接受网站的cookie的可以参考这篇文章:.https://www.cnblogs.com / cheney256 / 文章/8942240.html
HTML5中添加了数据 - *的方式来自定义属性,所谓数据 - *实际上上就是数据 - 前缀加上自定义的属性名,使用这样的结构可以进行数据存放。使用数据 - *可以解决自定义属性混乱无管理的现状。
var is_array = (value)=>Object.prototype.toString.apply(value) === '[object Array]'
localStorage的的的生命周期是永久,这意味着除非用户显示在浏览器提供的用户界面上清除的localStorage的的信息,否则这些信息将永远存在。
的的sessionStorage的生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过的的sessionStorage的存储的数据也就被清空了。
不同浏览器无法共享的localStorage的或的的sessionStorage中的信息。相同浏览器的不同页面间可以共享相同的localStorage的的(页面属于相同域名和端口),但是不同页面或标签页间无法共享的的sessionStorage的信息。这里需要注意的是,页面及标签页仅指顶级窗口,如果一个标签页包含多个IFRAME标签且他们属于同源页面,那么他们之间是可以共享的的sessionStorage的。
使用JavaScript splice()方法,array.splice(添加/删除的起始位,添加删除的个数(设置为0不会添加/删除),添加的数据(任选))
function compute(m, n) {
if (n == 0) {
return 1; //每行第一个数为1
} else if (m == n) {
return 1; //最后一个数为1
} else {
//其余都是相加而来
return compute(m - 1, n - 1) + compute(m - 1, n);
}
}
function yanghui(n) {
//杨辉三角,N为行数
for (var i = 0; i < n; i++) {
//一共N行
for (var j = 0; j <= i; j++) {
//每行数字的个数即为行号、例如第1行1个数、第2行2个数
document.write(compute(i, j) + " ");
}
document.write("
");
}
}
yanghui(15)
const a{
a=1;
b=2
}
a=2;
console.log(a)
详见我的另一篇博客:https://blog.csdn.net/Web_J/article/details/83900073
1.遵循规范不同
要求是AMD规范引入式,本质是一个赋值的过程,需要的结果赋值给某个变量
进口是ES6的一个语法标准,如果要兼容浏览器,必须转化为ES5的写法就是被转成要求
2.调用时间不同
要求是运行时调用,所以需要可以放在代码的任何地方
进口是编译时调用,所以只能放在文件头部
的的WebPack内置了专门用于提取多个代码中公共部分的插件CommonsChunkPlugin
相同点:v-if与v-show都可以动态控制dom元素显示隐藏
不同点:v-if显示隐藏是将dom元素整个添加或删除,而v-show隐藏则是为该元素添加css--display:none,dom元素还在。
简单来说就是zepto适用于移动端,而jQuery的的的适用于PC端.zepto的体积要比jQuery的的的小很多。区别详细看这篇文章https://blog.csdn.net/ningtt/article/详情/ 75137047
https://blog.csdn.net/Web_J/article/details/86476926
var is_obj = (value)=>Object.prototype.toString.apply(value) === '[object Object]'
1.从属关系区别@import
是CSS提供的语法规则,只有导入样式表的作用,link
是HTML提供的标签,不仅可以加载CSS文件,还可以定义RSS,相对连接属性等。
2.加载顺序区别
加载页面时,link
标签引入的CSS被同时加载; @import
引入的CSS将在页面加载完毕后被加载。
3.兼容性区别@import
是CSS2.1才有的语法,故只可在IE5 +才能识别; link
标签作为HTML元素,不存在兼容性问题。
4.DOM性可控性,区别
可以通过JS操作DOM,插入link
标签来改变样式;由于DOM方法是基于文档的,无法使用@import
的方式插入样式。
5.权重区别(该项有争议)link
引入的样式权重大于@import
引入的样式。
的的的document.getElementById()返回的是DOM对象,而$()返回的是jQuery的的的对象(通过jQuery的的的包装DOM对象后产生的对象和jQuery的的对象是jQuery的的的独有的,其可以使用的的jQuery的里的方法)虽然jQuery的的的对象是包装DOM对象后产生的,但是jQuery的的的无法使用DOM对象的任何方法,同理DOM对象也不能使用的的jQuery的里的方法。
1,DOM对象转的jQuery的对象
普通的大教堂对象一般可以通过$()转换成的jQuery的对象。
如:$(的的document.getElementById(“味精”))
返回的就是jQuery的的对象,可以使用的jQuery的的方法
。2,jQuery的的对象转DOM对象
由于jQuery的的对象本身是一个集合所以如果jQuery的的对象要转换为DOM的对象则必须取出其中的某一项,一般可通过索引取出。
如:$(“ #msg“中”[0],$(“DIV”)。方程(1)[0],$(“DIV”)。得到()[1],$(“TD”)[5]
var Ajax={
get: function(url, fn) {
// XMLHttpRequest对象用于在后台与服务器交换数据
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onreadystatechange = function() {
// readyState == 4说明请求已完成
if (xhr.readyState == 4 && xhr.status == 200 || xhr.status == 304) {
// 从服务器获得数据
fn.call(this, xhr.responseText);
}
};
xhr.send();
},
// data应为'a=a1&b=b1'这种字符串格式,在jq里如果data为对象会自动将对象转成这种字符串格式
post: function (url, data, fn) {
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
// 添加http头,发送信息至服务器时内容编码类型
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) {
fn.call(this, xhr.responseText);
}
};
xhr.send(data);
}
}
const ajaxPromise = param => {
return new Promise((resovle, reject) => {
var xhr = new XMLHttpRequest();
xhr.open(param.type || "get", param.url, true);
xhr.send(param.data || null);
xhr.onreadystatechange = () => {
var DONE = 4; // readyState 4 代表已向服务器发送请求
var OK = 200; // status 200 代表服务器返回成功
if(xhr.readyState === DONE){
if(xhr.status === OK){
resovle(JSON.parse(xhr.responseText));
} else{
reject(JSON.parse(xhr.responseText));
}
}
}
})
}
共同点:在的的JavaScript中,的的toString()方法和的的valueOf()方法,在输出对象时会自动调用。
不同点:二者并存的情况下,在数值运算中,优先调用了的的的valueOf,字符串运算中,优先调用了的的的toString。
用法英语谚语详细看这篇文章:HTTPS://blog.csdn.net/Web_J/article/details/84106129
console.log(a);
var a=10;
console.log(b);
let a=10;
因为var定义的变量有变量提升,所有第一个输出undefind
第二个let定义的变量没有变量提升,所以第二个会报错
function print() {
let person1={
name:"小黄"
};
let person2=person1
console.log(person1.name)//小黄
let person3={
name:person1.name
};
person3.name="小张"
console.log(person1.name)//小黄
let person4=Object.assign({},person1)
person4.name="小强"
console.log(person1.name)//小黄
let person5=person2
person5.name="小马"
console.log(person1.name)//小马
}
print();
var count=10;//全局作用域 标记为f1
function add(){
var count=0;//函数全局作用域 标记为f2
return function(){
count+=1;//函数的内部作用域
alert(count);
}
}
var s=add()
s();//输出1
s();//输出2
详看:https://blog.csdn.net/Web_J/article/details/84866582
class Animal {
constructor(){
this.type = 'animal'
}
says(say){
setTimeout(function(){
console.log(this.type + ' says ' + say)
}, 1000)
}
}
var animal = new Animal()
animal.says('hi') //undefined says hi
详看:https://blog.csdn.net/Web_J/article/details/84941963
window.onload = function(){
let i = 10;
let timer = setInterval(function(){
i<0 ? clearInterval(timer) : document.body.innerHTML = i--
},1000);
}