js相关
1、表达式有值,语句没有值
console.log(1)//这里的console是表达式有值,浏览器控制台会打印1、undefind
setTimeout(() => { console.log(1); }, 0);//这里的console是语句
2、var let count区别
var可以先赋值后声明,没有严格模式
let count 是块级作用域,count不能常量不能重复赋值,数组、对象可以赋值,添加属性
let age = 6;if(true){age = 10}
console.log(age)//10
let age = 6;if(true){let age = 10}
console.log(age)//6
count name = '杨帆'
name = '远航'//会报错,不能重复赋值
var作用域问题
x = 1;
alert(x);
var y = function() {
alert(x);
var x = 2;
alert(x);
}
y();
// 1,undefined,2
var val = 12;
function fun1(){//这个作用域有val,不找外面的,val提升未赋值
console. log('val====',val);
var val = 20;
console.log(val);
}
fun1(); // undfined 20
var val = 12;
function fun1(){ //这个作用域没有val找外面的
console. log('val====',val);
}
fun1(); // 12
3、闭包是指有权访问另一个函数作用域中的变量的函数
即如何从外部读取函数内部的变量问题?
alertName可以读取outFun中的变量,只要把alertName作为返回值,就可以在outFun外读取outFun内部变量
function init() {
var name = "Chrome"; //创建局部变量name和局部函数alertName
function alertName() { //alertName()是函数内部方法,是一个闭包
console.log(name); //使用了外部函数声明的变量,内部函数可以访问外部函数的变量
}
alertName();
}
init();
4、js数据类型
基础类型 String、Number、boolean、null、undefined、symbol
引用类型 object
5、Promise是为了解决异步问题
async/await是一对好基友,缺一不可,async相当于Promise,他们是为promise服务的是promise的进化版
<script>
// 主要考察宏任务和微任务,执行顺序先是宏任务-->微任务-->宏任务-->微任务一直循环下去;
// 宏任务一般是:包括整体代码script,setTimeout,setInterval。
// 微任务:Promise,proces
console.log('1')
async function async1(){//相当于promise
console.log('2')
await async2()
console.log('3')
}
async function async2(){
console.log('4')
}
// promise的resolve优先于process.nextTick()优先于promise.then()执行
// async相当于promise await优先then先执行
process.nextTick(function(){
console.log('5')
})
setTimeout(function(){
console.log('6')
process.nextTick(function(){
console.log('7')
})
new Promise(function(resolve){
console.log('8')
resolve()
}).then(function(){
console.log('9')
})
})
async1()
new Promise(function(resolve){
console.log('10')
resolve()
}).then(function(){
console.log('11');
});
console.log('12')
/* 打印结果 1 2 4 5 10 12 3 11 6 8 7 9 */
</script>
6、节流和防抖(input输入搜索、resize页面调整,拖动)
转载https://dujian.blog.csdn.net/article/details/100673689
函数节流(throttle)与 函数防抖(debounce)都是为了限制函数的执行频次,以优化函数触发频率过高导致的响应速度跟不上触发频率,出现延迟,假死或卡顿的现象。
函数防抖:将多次操作合并为一次操作进行。原理是维护一个计时器,规定在delay时间后触发函数,但是在delay时间内再次触发的话,就会取消之前的计时器而重新设置。这样一来,只有最后一次操作能被触发。
函数节流:使得一定时间内只触发一次函数。原理是通过判断是否有延迟调用函数未执行。
区别: 函数节流不管事件触发有多频繁,都会保证在规定时间内一定会执行一次真正的事件处理函数,而函数防抖只是在最后一次事件后才触发一次函数。 比如在页面的无限加载场景下,我们需要用户在滚动页面时,每隔一段时间发一次 Ajax 请求,而不是在用户停下滚动页面操作时才去请求数据。这样的场景,就适合用节流技术来实现。
7、1w条数据如何处理
8、es6数组去重Set
9、一个数组,如何取出数组对象中的某个属性返回一个新数组
arr.map(item=>item.name)
10、Object.assign()用法
11、递归(程序调用自身的编程技巧就称之为递归(recursion),就是再运行的过程中调用自己,本质上就是循环.)
12、小程序页面跳转最多几次(最多打开5个页面)可搭配wx.redirectTo关闭当前页面解决
转载部分
1》typeof类型
typeof NaN ==> number
typeof null ==> object
typeof undefined ==>undefined
2》作用域、变量提升性
作用域:先在内部找,如果内部找不到,向外查找
优先级:
变量 > 普通函数 > 参数 > 提升
3》es6中使用new Set()去重
问题:同值不同类型,不能去除
4》浅拷贝、深拷贝
浅拷贝:拷贝对象属性
问题:一个改变,互相影响
深拷贝:拷贝源对象
解决:一个改变,互相不影响
5》判断一个东西是否 是数组
instanceof
[].__proto__.constructor==Array
6》数组方法 : pop 、push 、 unshift 、shift
push :向数组末尾添加内容、返回数组长度
unshift :向数组第一位添加内容、返回数组长度
pop :删除数组末尾、返回删除谁
shift :删除数组第一位、返回删除谁
7》dom操作
添加:appendChild
移除:removeChild
移动:replaceChild
插入:insertBefore
复制:clone
创建:createElement
查找节点:getElementById
8》阻止冒泡和默认行为
阻止冒泡:
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble = true;
}
默认行为:
if(e.preventDefault){
e.preventDefault()
}else{
e.returnValue=false
}
9》new操作符具体做了什么?
1》创建对象
2》赋值操作 (给予属性或者方法)
3》this指向 (函数.call(对象))
10>js中的延迟加载
<script src='a.js' async></script>
<script src='a.js' defer='defer'></script>
11>use strict
是什么===》严格模式(解决一些js的怪癖行为的)
好处 ===》检测代码的,压缩的节约文件大小
坏处 ===》阻塞后面代码的运行,压缩出现错误
12>js创建对象的方式
1> {} | new Object()
2> 构造函数new
3> Object.create()
13>判断图片加载完成
complete属性
14>事件委托
var e = window.event || e;
var tar = e.target || e.srcElement;
15>let和const区别
const声明必须赋值
const不可变化的量(常量)
16>cookie、localStorage、sessionStorage区别
1》存储大小不同
cookie不能超过4k
localStorage、sessionStorage:5m或者更多
2》数据有效期
cookie可以设置生命周期
localStorage 一直保持,手动清除
sessionStorage 关闭页面或者浏览器就清除了
3》作用域不同
sessionStorage ==〉只能在当前页面有效
localStorage、cookie : 不同页面也会存在
4》Web storage 支持事件通知机制、可以更新数据时发送给事件监听者
17>把arguments转换为真正的数组
Array.from
18>call、apply、bind区别
bind==》返回函数
call==》 函数.call(null,1,2,3,4)
apply==》函数.call(null,[1,2,3,4])
13、Array.slice(start,end)(不包括end该元素)不会改变原数组从哪到哪开始删除/截取、返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。
14、 Array.splice(index,howmany,item1...itemx)方法向/从数组中添加/删除项目,然后返回被删除的项目。该方法会改变原始数组
- index 删除开始位置的索引
- howmany删除的数量几个长度
- item1...itemx传递新元素,这些元素可以插入到开始位置索引前边
- 会改变原有的数组
15、作用域
function test(){
var n = 4399;
function add(){
n++;
console.log('n=',n)
}
return { n:n,add:add }
}
var result = test();
var result2 = test();
result.add();//4400
result.add();//4401
console.log(result.n);//4399
result2.add();//4400
push()、pop()和unshift()、shift()区别
push()、pop() 是从数组的尾部进行增减
unshift()、shift() 是从数组的头部进行增减
push()和unshift() 向数组的 尾部/头部 添加若干元素,并返回 数组的 新长度;
pop()和shift() 从数组的 尾部/头部 删除1个元素(删且只删除1个),并返回 被删除的元素
15、提取url的主域
function getDomain(weburl){
var urlReg=/https:\/\/([^\/]+)/i;
domain = weburl.match(urlReg); console.log(domain)
return ((domain != null && domain.length>0)?domain[0]:"");
}
16、Math.round 0.5向下取整 (经典题型)
Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整
17、面向对象的三大特性包括:封装,继承,多态
18、false、0、null、undefined和字符串的关系null==undefined
18、对于“+”来说,有两个含义:第一个含义是做字符串拼接,第二个含义是加减法中的加法。代码var foo = "10"+3-"1";console.log(foo);执行后,foo的值为102
1,如果操作数里有一个是字符串,其他的值将被转换成字符串;
2,其他情况,操作数转换成数字执行加法运算。
而对于“ - ”来说,只有一个含义,就是做减法,自然不会转化成字符串了
19、js中 0.1+0.2 为什么不等于0.3 怎样解决(浮点数精度问题)
小程序相关
1、小程序生命周期
2、小程序页面传递数据方法
3、怎么封装小程序数据请求的
4、bindtap/catchtap区别
5、用什么方法提高微信小程序的应用速度
6、一个列表点击详情,返回列表显示上次位置
BFChttps://blog.csdn.net/qq_39394518/article/details/95221350
1、布局,浮动、块级元素
BFC 全称为 块级格式化上下文(Block Fromatting Context),是Web页面的可视化CSS渲染出的一部分。它是块级盒布局出现的区域,也是浮动层元素进行交互的区域。简单的来说,它就是一种会影响元素与元素之间的位置、间距的属性
vue相关
转载https://segmentfault.com/a/1190000019162582
1、vue生命周期