js基础常考面试题汇总(一)(附答案)

1.值类型和引用类型的区别

//值类型
let a = 100
let b = a
a = 200
console.log(b) //100
//引用类型
let a = {
          
    age: 20 }
let b = a
console.log(a.age) //21
值类型:number, string, boolean, null, undefined, symbol(ES6)
 引用类型:Object(对象的子类: Array, Function(对象的顶层类型), Reg, Date)。
 区别:
(1)值类型的变量重新赋值后,它的值不会改变,而引用类型的值重新赋值后会改变
(2)值类型是存储在栈中的,算是值的拷贝。引用类型是存储在堆中的,是值的引用。

2.typeof运算符作用

//判断所有值类型
let a;                  typeof a    //undefined
const str = abc;      typeof str  //string
const b = 100 ;         typeof b    //number
const c = true;         typeof c    //boolean
const s = Symbol(s);  typeof d    //symbol
//能判断函数
typeof console.log     //function
typeof function() {
          
   }   //function
//能识别引用类型(不能继续识别)
typeof null           //object
typeof [a,b]      //object
typeof {
          
   x:100}        //object
作用:可以判断所有值类型,判断函数,能识别引用类型(不可细分)

3.instanceof 可判断对象的具体类型

karry instanceof object  //true
//*判断一个变量是数组
[] instanceof Array   //true

[] instanceof Object  //true
{
          
   } instanceof Object  //true

4.truly变量和falsely变量

truly变量:!!a===true的变量
falsely变量:!!a===false的变量

5.何时使用= = = 何时使用 = =

两等:当数据类型不一样时,会发生强制转换,然后比较值是否相等
三等:数据类型相同,数据的值也相同,不会发生类型转换,才能为true

6.原型 (1)原型指的是两个原型属性:

    prototype: 显示原型属性,每个函数class都有显示原型prototype proto: 隐式原型属性,每个对象实例都有隐式原型_proto_ 实例的_proto_指向对应class的prototype

(2)原型链 访问一个对象的属性时,先在自身属性中查找,找到返回,如果没有, 再沿着__proto__这条链向上查找, 找到返回,如果最终没找到, 返回undefined 7.闭包

闭包是指有权访问另一个函数作用域中的变量的函数。
创建闭包的方式就是在一个函数内部创建另一个函数
应用场景:放置在那些声明函数的环境里,被标记了进入环境没有标记离开环境的变量供函数使用
作用域应用的特殊情况,有两种表现:
函数作为参数被传递
函数作为返回值被传递

8.同步和异步的区别

基于js是单线程语言 异步不会阻塞代码执行 同步会阻塞代码执行

9.如何解决异步 异步问题: js在执行过程中,每遇到一个异步函数,都会将这个异步函数放入一个异步队列中,只有当同步线程执行结束之后,才会开始执行异步队列中的函数

解决异步: 回调函数 promise generator(微任务) async+await(可与promise混用)

10.遍历数组和对象的方法:

数组: (1) for循环 用length测试数组的长度 (2) forEach() 需要一个函数作为参数,传递3个参数作用: (正在遍历的对象,遍历的对象的索引,正在遍历的数组) (3) map 遍历数组的每个元素,并回调,需要返回值,返回值组成新的数组,原数组不变 (4) filter() 不改变原始数组,返回新的数组 (5) for…of循环可以正确相应break,continue,return (6) every() 返回一个boolean,判断每个元素是否符合条件(所有都判断,一false即返) (7) some() 返回一个boolean,判断是否有元素是否符合func条件(有一个就行, 一true即返) 对象: (1) For…in 遍历对象key值 (2) Object.keys(obj) 返回对象key值数组 (3) 对象合并 Object.assign():将一个或多个源对象复制到目标对象

经验分享 程序员 微信小程序 职场和发展