js高频题

  1. js 的数据类型(null和undefined区别)
    基本类型:string, number, null, undefined, Boolean, symbol,bigint
    引用类型:Object

  2. 判断变量类型
    常用的变量类型有11种:Number,String,Boolean,Object,Array,Json,Function,undefined,Null,
    Date,RegExp,Error
    1.使用typeof能判断出四种,分别是number,string,boolean,object,剩余的均被检测为object
    2.p instaceof Person. 判断Person指向的原型对象在不在p的原型链上。这种变量判断可以检测出9种,undefined和null被检测为object。
    3.使用Object.prototype.toString.call()
    Object.prototype.toString可以取得对象的内部属性[[class]],并根据这个内部属性返回诸如"[object Number]"的字符串.那么我们就可以通过call获取内部属性[[class]]
    判断空数组:arr.length == 0
    判断空对象:Object.keys(obj).length == 0

  3. 强制转换成数字,注意undefined会被转成NaN,null会被转成0
    字符串隐式转换,+是字符串拼接,其他符号转换成数字计算。
    if隐式转换成boolean: null, undefined, ‘’",0,NaN转为false
    == 和 ===
    ==:只比较值
    ===:值和类型都比较
    包装类型是特殊的引用类型。每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而可能调用一些方法来操作这些数据。就对那些不是new出来的,在调用方法时候包装。用完即销毁。包装类型共包括Boolean、Number和String三种.
    包装类型

  4. 原型和原型链
    每一个构造函数都有一个prototype,叫原型对象(祖宗),存放一些共享的方法。对象身上有__proto__,叫对象原型,指向原型对象。

原型对象里有consturctor指向构造函数.
在这里插入图片描述
创建新对象
构造函数的原型对象prototype和对象的对象原型__proto__连起来
新对象和函数this绑定
执行构造函数代码
返回对象
在这里插入图片描述
原型链。
在这里插入图片描述
this指向实例对象或者调用者。

  1. 闭包。是个函数。它的局部变量可以被另一个函数访问。比如函数里面写函数,外层函数就是一个闭包。它延伸了变量的作用范围。
    函数定义的地方,从内到外找变量对象。
    应用:利用for循环创建n个立即执行函数,接收i。

  2. 函数内部this指向
    在这里插入图片描述
    改变this指向。
    1.call方法。fun.call(obj,arg1)。第一个参数是指向的位置,后面是普通参数。可以写继承,将父构造函数指向子类,从而子类拥有父类的属性。
    2.apply方法。fun.apply(obj,[args]).第二个参数是数组。
    3.bind方法。不会调用函数,参数与call一样。返回一个新函数(改变指向后的。应用,按钮定时器,改变定时器内部ths指向到按钮。

7.事件捕获从外到内,冒泡从内到外。事件在冒泡阶段触发
事件委托,子级的事件给父级处理。e.target获取事件捕获阶段最内层元素,点samll就是small。
可以避免给每个元素都添加事件,只需给父元素绑定事件就好。
在这里插入图片描述

事件委托

  1. cookie和storage
    cookie是服务器存在客户端的文本文件4kb,一般存放身份信息。
    webStrorage: 相对于cookie存放的数据大一些5MB。
    sessionStorage本地存储回话数据,会话结束后数据销毁。
    localStorage持久的本地存储。
    cookie和web storage在这里插入图片描述

  2. 数组常见的方法
    会改变数组: shift,unshift,pop,push,splice,reverse,
    不改变数组: concat, slice,map,filter,reduce
    obect.assgn,展开运算符…也是浅拷贝
    但他们是浅拷贝,改为引用类型就能看出。
    用JSON.parse(JSON.stringify(list))可实现深拷贝
    浅拷贝深拷贝

  3. new对象时内部发生了什么
    首先创建一个新对象
    新对象的和__proto__和构造函数的prototype链接
    函数的this和新对象绑定
    执行构造函数
    返回新对象

  4. 防抖和节流(插眼)

  5. requestAnimationFrame优势,隐藏元素不重绘,节省内存。刷新频率60帧每秒。

  6. let/var.const
    for循环里面有定时器函数或者回调函数,用var定义i容易出错。用let可以形成块级作用域。
    在这里插入图片描述

  7. 排队打饭没带卡,先让出队列,让后面人继续。我先去拿卡。
    异步任务不阻塞主任务的进度。
    promise解决回调地狱。
    resolve函数执行后,then才会执行。then的参数就是resolve传出来的。
    在这里插入图片描述
    Promise.all所有成功,返回成功结果的数组。失败,返回最先失败的那个err。
    Promise.race返回最快的那个。

    async和await
    async 是“异步”的意思,await 是等待的意思。await 只能出现在 async 函数中。async返回一个 promise对象。
    await 后面本质是一个promise对象,await promise对象,得到的值就是resolve传出来的。
    失败的情况用try…catch
    async,await
    await后面的代码可以当做是then的内容,是个微任务。
    在这里插入图片描述
    13582674
    同步任务:1358
    微任务:2,6,7
    宏任务:4

  8. 箭头函数和普通函数
    function变为箭头。箭头函数匿名的,不能作为构造函数。没有prototype属性。箭头函数的this不是动态的,定义时确定。 在这里插入图片描述

    箭头函数

  9. js是单线程的
    1.同步和异步任务分别进入不同的执行"场所",同步的进入主线程,异步的进入Event Table并注册函数。
    2.当Event Table中指定的事情完成时,会将这个函数移入Event Queue。
    3.主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行。
    4.上述过程会不断重复,也就是常说的Event Loop(事件循环)。

js运行机制
注意,setImmediate可能和定时器发生循环。定时器1=>setImmediate=>定时器2
在这里插入图片描述
在这里插入图片描述
晓舟报告。

  1. 继承的方式。
    原型链,构造函数call,实例继承,extends
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值