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?
答:(不知道怎么回答就举例说明)
第一行的代码其实只是第二行的语法糖(相同功能下,语法糖更加简洁,比如箭头函数)