rem布局原理:通过不同视口下html字体大小,实现等比缩放,在vscode中装pxtorem插件,在设置里设置跟字体大小,1rem等于多少px,就可以直接把px转成rem。在vue中用postcss-pxtorem,建一个postcss.config.js,在里面设置参数后,就可以了。
继承:
垃圾回收:1、按引用,根据一个js对象被引用的次数,引用一次,引用次数加1,当引用次数为0时,所占用内存就会被回收/
2、标记清除法,根据当前对象是否可以直接被当前环境访问到,访问不到就清除。可以解决循环引用的问题(防止内存泄漏)
闭包会把局部变量放到全局变量来访问,当闭包过多就会造成内存泄漏,闭包获取到的变量在不使用的时候应该手动清除。把变量设置为空 null
内存管理:像C语言这样的底层语言一般都有底层的内存管理接口,JavaScript自动进行了分配内存,并且在不使用它们时“自动”释放。 释放的过程称为垃圾回收。
事件委托:给父元素注册事件,加addeventlistener,当子元素触发该事件时,父元素事件也会被触发,根据e.target.nodeName 判断是否是子元素触发,=li,如果是子元素,就执行操作。利用冒泡
事件冒泡:从当前元素冒泡到html
ES6:let const,(声明一次后,不能在声明第二次,没有作用域提升,const声明常量),async(对异步函数做操作,一般就是封装axios),await后面跟promise对象,当promise事件完成后才会执行下一行代码,可以以同步函数的方式写异步代码。symbol,用对象的属性上,这个属性就变得独一无二了,flat可以把多维数组转化为一维数组,将嵌套的数组拉平[1,[2,3[4,5]]].flat[infinity]从axios中拿出来的数据,children套children,树形结构,for of既可以遍历对象也可以遍历数组,...展开运算符,将一个数字组转化为逗号分割的参数序列。
created和activated区别
created():在创建vue对象时,当html渲染之前就触发;但是注意,全局vue.js不强制刷新或者重启时只创建一次,也就是说,created()只会触发一次;
activated():在vue对象存活的情况下,进入当前存在activated()函数的页面时,一进入页面就触发;可用于初始化页面数据等
-
字符串的常用方法
-
toLowerCase(): 把字符串转为小写,返回新的字符串。
-
toUpperCase(): 把字符串转为大写,返回新的字符串。
-
charAt(): 返回指定下标位置的字符。如果index不在0-str.length(不包含str.length)之间,返回空字符串。
var str='fffggggHUEJDOOO'; console.log(str.charAt(6)) //g
-
charCodeAt(): 返回指定下标位置的字符的unicode编码,这个返回值是 0 - 65535 之间的整数。
-
indexOf(): 返回某个指定的子字符串在字符串中第一次出现的位置
-
lastIndexOf(): 返回某个指定的子字符串在字符串中最后出现的位置。
-
slice(): 返回字符串中提取的子字符串。
-
substring(): 提取字符串中介于两个指定下标之间的字符。
-
substr(): 返回从指定下标开始指定长度的的子字符串
-
split(): 把字符串分割成字符串数组。
-
replace(): 在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
var str="hello WORLD";
var reg=/o/ig; //o为要替换的关键字,不能加引号,否则替换不生效,i忽略大小写,g表示全局查找。var str1=str.replace(reg,"**")
console.log(str1); //hell** W**RLD
match(): 返回所有查找的关键字内容的数组。
var str="To be or not to be";
var reg=/to/ig;
var str1=str.match(reg);
console.log(str1); //["To", "to"]
console.log(str.match("Hello")); //null
订阅制模式
-
实现一个监听器Observer,用来劫持并监听所有属性,如果有变动的,就通知订阅者。
-
实现一个订阅者Watcher,可以收到属性的变化通知并执行相应的函数,从而更新视图。
-
实现一个解析器Compile,可以扫描和解析每个节点的相关指令,并根据初始化模板数据以及初始化相应的订阅器。
数组的常用方法
shift() 方法:把数组的第一个元素删除,并返回第一个元素的值
unshift:将参数添加到原数组开头,并返回数组的长度
push() 方法:可向数组的末尾添加一个或多个元素,并返回新的长度,(用来改变数组长度)。
pop() 方法:用于删除并返回数组的最后一个(删除元素)元素,如果数组为空则返回undefined ,把数组长度减 1 返回删除的那个元素
Array.slice 截取数组的实现方法
slice() 方法可从已有的数组中返回选定的元素
concat() 方法:用于连接两个或多个数组,并返回一个新数组,新数组是将参数添加到原数组中构成的
join() 方法:用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。
- reverse() :方法用于颠倒数组中元素的顺序。
- splice() :方法向/从数组中添加/删除项目,然后返回被删除的项目。
- sort(orderfunction):按指定的参数对数组进行排序
-
-
布局
.container {
display: grid;
place-items: center;
}
左上角布局,右下角布局
place-items: start; place-items: end;
2.要里面的内容横向居中
.container {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
父:display: flex; flex-wrap: wrap;
给子孩子(如果有多余宽度,项目是否可以扩大。 缩小。想要一个多宽)
flex: 0 1 150px;
3.两列布局 给父盒子加 第一列的宽度是minmax(150px, 25%),即最小宽度为150px,最大宽度为总宽度的25%;第二列为1fr,即所有剩余宽度。
.container {
display: grid;
grid-template-columns: minmax(150px, 25%) 1fr;
}
4.三明治布局
给父盒子
.container {
display: grid;
grid-template-rows: auto 1fr auto;
}
5.圣杯布局
给总的大盒子
.container {
display: grid;
grid-template: auto 1fr auto / auto 1fr auto;
}
grid-template-rows和grid-template-columns都是auto 1fr auto,就表示页面在垂直方向和水平方向上,都分成三个部分。第一部分(页眉和左边栏)和第三部分(页脚和右边栏)都是本来的内容高度(或宽度),第二部分(内容区和主栏)占满剩余的高度(或宽度)。
flex
左对齐,右对齐,居中,两端对齐,项目之间的间隔相等,每个项目两侧之间的间隔相等
.box {
justify-content: flex-start | flex-end | center | space-between | space-around;
}
使元素垂直水平居中的几种办法
- display:flex;
justify-content:center
align-items:center
- 子绝父相 子盒子top left 50% transform:translate(-50%,-50%)
- .fu {
display: grid;
place-items: center;
}
- 子绝父相 利用定位 各一半100的话要-50px;
top:50%; left:50%; margin-top:-50px; margin-left:-50px;
- 子绝父相 利用margin:auto;
.child{ position:absolute; margin:auto; top:0; left:0; right:0; bottom:0; }
1.flex:1代表 flex:1 1 auto
-
第一个参数表示: flex-grow 定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大
-
第二个参数表示: flex-shrink 定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小
-
第三个参数表示: flex-basis**给上面两个属性分配多余空间之前, 计算项目是否有多余空间, 默认值为 auto, 即项目本身的大小**
-
JS执行过程
-
js并不是真正从上到下依次执行的,js在执行这些代码之前首先要进行一个预解析,它先去找所以的定义,变量的定义函数的声明,并且把变量的定义函数的声明进行提升,提升到这个作用域的最顶层。当执行到函数内部的时候,在执行函数内部的预解析,执行完预解析后再去执行代码,代码是一行一行的执行的。
-
是单线程的,浏览器执行JS脚本的时候,当js中的其中一环报错或者死循环,那么js就不会再继续往下执行了;直到这个问题被解决。会将所有的定时器都放到一个队列里面,当主线程的代码执行完成之后再执行队列里面的代码。