前端面试题一(八股文系列)

1,问:js基本数据类型?

答:String ,Number, Boolean, undefined, Null, Object, Symbol, BigInt(ES10).

2,问:null和undefined区别?

答:声明变量的默认值是undefined;

一般设置对象的初始值为null,非对象为undefined;

null是关键字,undefined不是。

3,问:typeof(null) =>? typeof(NaN)=>?

答:object,number

注:NaN:表示一个不能表示的数字,但NaN是一个number型。

4,问:0.1+0.2为什么不等于0.3?

答:浮点数的精度不准,0.1在存储的时候是以二进制形式,实际上的二进制并不完全等于0.1,是近似取值为0.1,在进行算术运算时,会先转化为二进制,在相加,所有得到的结果是0.30000000000000004。

追问:怎么才能让他们相等?

答:(0.1+0.2).toFixed(2),四舍五入。

或相减绝对值小于0.000001.

或同时扩大相同倍数。

5,问:let ,const , var 区别?

答:(方法:两两比较做区分)

let是ES6提出的变量声明方法,有块级作用域的概念,不可重复声明;

var是ES5以及之前使用的变量声明方法,全局作用域,有变量提升,可重复声明;

const是声明一个指定的常量,一旦声明就不能改变。

6,问:说说箭头函数和普通函数区别?

答:箭头函数写法简洁。

不可作为构造函数。

this指向,跟函数定义的作用域有关,一般指向外层对象。

当只有一条可执行语句时,可省略花括号。

不能使用arguments

7,问:你对json怎么理解的?

答:是一种数据交换格式,可以是对象或是数组,

可以转换:js对象->json:JSON.stringify(obj)

json->js对象:JSON.parse(str)

8,问:unicode和utf8区别?

答:unicode是一个字符集,utf8是一种编码方式,utf8是unicode的实现方式之一,(还可以用utf16或utf32实现)

9,问:DOM和BOM区别?

答:(答题方式:遇到这种英语简写,先翻译,再答作用, 不知道怎么说就举例)

DOM是Document  Object  Model:文档对象模型,对浏览器的内容进行操作,比如:document.getElementById

BOM是Browser Object Model:浏览器对象模型,对浏览器进行操作,比如:键盘的上下键,回车键等

10,问:原型,原型链的理解?

答:对象都有原型,最底层的原型为object。

对象有原型,原型也是对象,这样环环相扣,就形成了链式结构。

比如:p是Person()的实例,是一个Person对象,它拥有一个属性值__proto__,并且__proto__是一个对象,包含两个属性值constructor和__proto__

11,问:什么是闭包?

答:(定义+作用)

定义:函数A中定义了函数B,函数B可以访问函数A中的变量,函数B就是闭包。 闭包的本质就是在一个函数内部创建另一个函数。

我们首先知道闭包有3个特性: ①函数嵌套函数 ②函数内部可以引用函数外部的参数和变量 ③参数和变量不会被垃圾回收机制回收。举例:

function fn(){
	var num=3;
    return function(){
        var n=0;
        console.log(++n);
        console.log(++num)
    }
}
var fn1=fn();
fn1()//1  4
fn1()//1 5

作用:好处:保护函数内变量的安全,防止冲突

坏处:被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null;

具体可参考文章:js闭包的面试问题_m0_52358470的博客-CSDN博客

12,问:js异步编程的实现方式?

答:回调函数,promise,async/await

追问:promise的作用是啥?

答:解决回调地狱问题

13,问:并发和并行的区别?

答:并发:一个cpu处理多个线程,轮流交替执行

并行:多个cpu执行多个线程,同时进行

14.问:MVVM,MVC区别?

答:MVVM:model view  viewMoel,实现数据双向绑定,修改视图会更新数据,修改数据会更新视图,是自动的双向绑定

mvc:model  view  controller,手动的控制model和view

15,问:slot是啥?

答:默认插槽:当组件中有内容需要单独定义

具名插槽:如果一个组建中想使用多个slot

作用域插槽:在定义插槽的时候,可以在插槽上存放数据,把带有数据的插槽叫做作用域插槽

16,问:v-model,v-bind?

答:(不知道怎么回答就举例说明)


 第一行的代码其实只是第二行的语法糖(相同功能下,语法糖更加简洁,比如箭头函数)

你可能感兴趣的:(前端开发,前端)