前端js面试题(1)

这篇博客详细探讨了前端JavaScript面试中的常见问题,包括Null和undefined的区别、JavaScript类型判断方法、变量声明方式、闭包的优缺点、浅拷贝与深拷贝、数组去重策略、DOM事件阶段和事件代理、JavaScript执行机制与事件循环、Promise.all和Promise.race的使用,以及async和await的原理。还讨论了ES6的class与构造函数的不同、CSS属性如transform、translate和transition,以及rAF(requestAnimationFrame)在动画中的应用和JavaScript的垃圾回收机制。博客最后提到了前端性能优化的多个方面。
摘要由CSDN通过智能技术生成

Null和undefined的区别

(1)null是一个表示”无”的对象,转我数值是为0,undefined是一个表示”无”的原始值,转为数值时为NaN。当声明的变量还未被初始化时,能量的默认值为undefined

(2)Null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象

(3)Undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:

  a、变量被声明了,但没有赋值时,就等于undefined

  b、调用函数时,应该提供的参数没有提供,该参数等于undefined

  c、对象没有赋值属性,该属性的值为undefined

  d、函数没有返回值时,默认返回undefined

(4)null表示”没有对象”,即该处不应该有值。典型用法是:

  a、作为函数的参数,表示该函数的参数不是对象

  b、作为对象原型链的终点

 

判断 js 类型的方式

1. typeof

可以判断出'string','number','boolean','undefined','symbol'
但判断 typeof(null) 时值为 'object'; 判断数组和对象时值均为 'object'

2. instanceof

原理是 构造函数的 prototype 属性是否出现在对象的原型链中的任何位置

function A() {}
let a = new A();
a instanceof A     //true,因为 Object.getPrototypeOf(a) === A.prototype;

3. Object.prototype.toString.call()

常用于判断浏览器内置对象,对于所有基本的数据类型都能进行判断,即使是 null 和 undefined

4. Array.isArray()

用于判断是否为数组

 

ES5 和 ES6 分别几种方式声明变量

ES5 有俩种:var 和 function
ES6 有六种:增加四种,letconstclass 和 import

注意:letconstclass声明的全局变量再也不会和全局对象的属性挂钩

 

闭包的概念?优缺点?

闭包的概念:闭包就是能读取其他函数内部变量的函数。

优点:
①保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突
②在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存)
③匿名自执行函数可以减少内存消耗

缺点:
①其中一点上面已经有体现了,就是被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null;
②其次由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响

 

浅拷贝和深拷贝

  • 浅拷贝
// 第一层为深拷贝
Object.assign()
Array.prototype.slice()
扩展运算符 ...
  • 深拷贝

                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值