JS基础面试题(送给正在找工作的小伙伴)

(一)js数据类型有什么

1-undefined 2-boolean 3-string 4-number 5-object 6-Null

(二)数组常用的方法?

不要直接上来就是push,shift,pop在这里可以说一些比较别人不经常说的,比方说:splice,join,map,filter等等,还有es6的find,findIndex

(三)字符串常用的方法

split(),substring(),substr(),concat()等方法

(四)数组方法那些会改变原素组

01-shift:将第一个元素删除并且返回删除元素,空即为undefined
02-unshift:向数组开头添加元素,并返回新的长度
03-pop:删除最后一个并返回删除的元素
04-push:向数组末尾添加元素,并返回新的长度
05-reverse:颠倒数组顺序
06-sort:对数组排序
07-splice:splice(start,length,item)删,增,替换数组元素,返回被删除数组,无删除则不返回

(五)什么是事件委托?

事件委托就是利用事件冒泡,只指定一个父类元素绑定事件,就可以管理所有子类元素

(六)事件委托的实际运用场景是什么?

01-Ajax局部刷新区域

02-绑定层级比较低的时候,不在body上绑定

03-定次数较少的时候,把多个事件绑定合并到一次事件委托中,由这个事件委托的回调,来进行分发

(七)怎么理解js的单线程问题?

01-js本身是单线程的,浏览器有个概念叫执行队列

02-js需要先将自己加入到执行队列中由浏览器来解析,但是执行队列时允许部分元素或者说是对象插队的,比如ajax。于是就形成了js的单线程,但是看起来像是多线程的

03-这里一般会出一些同步和异步的面试题   ->比如 如下Dome:

console.log(111);setTimeout(function(){console.log(222)},1000); console.log(333)  这段代码的结果,为什么结果是这样子的,这段代码的结果是,111,333,222.如果要改成按照顺序执行,111,222,333怎么改进,这个思路是Promise()

(八)数组去重?

01-es5->这个实现方法很多,我列举其中的2种->

(01)

 第一种:var arr1 = [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5];

    function rep(arr) {
      var ret = [];
      for (var i = 0; i <arr1.length; i++) {
        if (ret.indexOf(arr1[i]) ==-1) {
             ret.push(arr1[i]);
        }
     
    }
    return ret;
    }
    var result = rep(arr1);
    console.log(result)

(2)

 第二种:var arr = [1, 2, 3, 4, 5, 1, 2, 3];
    var r = arr.filter(function (element, index, self) {
      return self.indexOf(element) === index;
    });
    console.log(r);

02-es6->var arr =Array.from( new Set(数组))

(九)冒泡排序

var examplearr=[8,94,15,88,55,76,21,39];
function sortarr(arr){
    for(i=0;i<arr.length-1;i++){
        for(j=0;j<arr.length-1-i;j++){
            if(arr[j]>arr[j+1]){
                var temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
    return arr;
}
sortarr(examplearr);
console.log(examplearr)

(十)typeof 和 instanceof 的区别?

01-常用来判断一个变量是否为空,或者是什么类型的

02-在js中,判断一个基本数据的变量的类型会常用typeof,但是在判断复杂数据类型的时候,无论是什么样的类型都会输出'object',这就需要用到instanceof来检测某个对象是不是另一个对象的实例

(十一)for of 与for in 的区别, 对象是否可以使用for of遍历、

1-for in主要是用来遍历对象,虽然也可以遍历数组,但是不推荐使用遍历数组,因为for in会遍历数组的所有可枚举属性,包括原型上面的

2-数组的for in的遍历结果是数组的索引,且都为字符串型,不能用于运算

3-for of支持遍历数组、类对象(例DOM NodeList对象)、字符串、Map对象、Set对象->>for of不支持遍历普通对象,如果瑶遍历,和可通过与Object.keys()搭配使用遍历

4-for of遍历数组后的输出结果为数组元素的值

(十二)获取页面中元素的js方法

01-document.getElementById(id名),获取的是单个元素

02-document.querySelector(可以是id,可以是类,标签,等等),获取的是单个元素

03-document.querySelectorAll(选择器都可以) ,获取的是一类元素,是个伪数组

04-document.getElementsByTagName(标签的名字)  获取的是一类元素,是个伪数组

猜你喜欢

转载自blog.csdn.net/weixin_43595461/article/details/90553249