前端面经汇总一2019oppo前端一面(含问题和答案)

本文整理了2019年OPPO前端一面的面试问题,涵盖JS数据类型、数组类型判断、函数创建、原型链、作用域链、防抖与节流、事件循环、BFC、HTTP2.0特性以及HTTP状态码301、302的含义。通过实例解析,帮助理解前端面试中常见的技术点。
摘要由CSDN通过智能技术生成

一、2019oppo前端一面

  1. JS中的数据类型:

    (1)五种基本数据类型:
    	a) String  字符串类型
    	b) Boolean  布尔类型
    	c) Number  表示整数和浮点类型
    	d) undefined 声明了变量但未初始化
    	e) null  空对象指针,也是对空对象的引用
    (2)一种复杂数据类型
    	Object 是一组属性与方法的集合,属于引用类型。引用类型是一种数据结构。也就是说,JS按照存储方式分为值类型和引用类型。
    	JS中三大引用类型:
    		Object类型
    		Array类型
    		function类型
    (3)es6新增的Symbol数据类型
    	用于防止属性名冲突而产生的数据类型
    
  2. 原始值和引用值的区别

    原始值------存储在栈(stack)中得简单数据段,也就是说它们的值直接存储在变量访问的位置;基本数据类型按值访问,因此直接操作保存在变量中的实际值。
    引用值------以对象形式存储在堆(heap)中,也就是说,存储在变量中的是一个指向内存的指针。由于引用值的大小会改变,所以不能存储在栈中,否则会降低变量查询的速度。存放在栈空间的变量的值是该对象存储在堆中的地址,地址的大小是固定的,所以把他存储在栈中对变量性能无任何负面影响。
    堆和栈的区别(补充):
    	栈(stack)----- 由操作系统自动分配内存空间,自动释放,存储的是基础变量以及一些对象的引用变量,占据固定大小的空间。
    		基础变量的值是存储在栈中,而引用变量存储在栈中的是指向堆中的数组或者对象的地址,这就是为何修改引用类型总会影响到其他指向这个地址的引用变量。
    		优点:相比于堆来说存取速度会快,并且栈内存中的数据是可以共享的,例如同时声明了var a = 1和var b = 1,会先处理a,然后在栈中查找有没有值为1的地址,如果没有就开辟一个值为1的地址,然后a指向这个地址,当处理b时,因为值为1的地址已经开辟好了,所以b也会同样指向同一个地址。
    		缺点:相比于堆来说的缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
    	堆(heap)-----由操作系统动态分配的内存,大小不定也不会自动释放,一般由程序员分配释放,也可由垃圾回收机制回收。
    		堆内存中的对象不会随方法的结束而销毁,就算方法结束了,这个对象也可能会被其他引用变量所引用(参数传递)。创建对象是为了反复利用(因为对象的创建成本通常较大),这个对象将被保存到运行时数据区(也就是堆内存)。只有当一个对象没有任何引用变量引用它时,系统的垃圾回收机制才会在核实的时候回收它。
    
  3. 如何判断一个数组的类型
    (1)ES5新增的数组方法,Array.isArray(),在支持ES5的浏览器中,没什么问题,但是如果是在IE9以下版本,这个方法并未受到支持.
    (2)arr instanceof Array,一般来说,instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上,是用来判断某个元素是否某对象构造函数实例。在数组判断上,typeof不能区分数组,但instanceof关键字可以进行数组的判定。
    (3)toString,对象的toString方式也可以判定数组类型,一般来说这种方式的判定是各大库的一种Array.isArray的代替实现。
    例如,polyfill中,就是如此实现
    补充(因为我不知道polyfill是什么。。。。):

Polyfill 是一块代码(通常是 Web 上的 JavaScript),用来为旧浏览器提供它没有原生支持的较新的功能。比如说 polyfill 可以让 IE7 使用 Silverlight 插件来模拟 HTML Canvas 元素的功能,或模拟 CSS 实现 rem 单位的支持,或 text-shadow,或其他任何你想要的功能。
https://developer.mozilla.org/zh-CN/docs/Glossary/Polyfill

if (!Array.isArray) {
   
  Array.isArray = function(arg) {
   
    return
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值