前端JavaScript面试题个人总结

1、JS有哪些数据类型

  • 主要数据类型:UndefinedNullBooleanNumber、String
  • 引用数据类型:object、array、function

2、JS的组成

  • ECMAScript(核心):JavaScript 语言基础
  • DOM(文档对象模型):规定了访问HTML和XML的接口
  • BOM(浏览器对象模型):提供了浏览器窗口之间进行交互的对象和方法

3、介绍JS有哪些内置对象

  • 数据封装类对象:Object、Array、Boolean、Number、String
  • 其他对象:Function、Arguments、Math、Date、RegExp、Error
  • ES6新增对象:Symbol、Map、Set、Promises、Proxy、Reflect

4、JS中对this的指向和理解

调用方式 非严格模式下 备注
普通函数调用 window 严格模式下是 undefined
构造函数调用 创建的实例对象 原型方法中 this 也是实例对象
对象方法调用 该方法所属对象 紧挨着的对象
事件绑定方法 触发事件的对象
定时器函数 window

5、null和undefined的区别?

  • null是一个表示”无”的对象,转为数值时为0;
    • 作为函数的参数,表示该函数的参数不是对象。
    • 作为对象原型链的终点。
  • undefined是一个表示”无”的原始值,转为数值时为NaN。
    • 变量被声明了,但没有赋值时,就等于undefined。
    • 调用函数时,应该提供的参数没有提供,该参数等于undefined。
    • 对象没有赋值的属性,该属性的值为undefined。
    • 函数没有返回值时,默认返回undefined。

注意:nullundefined结果是true的,null=undefined结果是false的。

6、什么是内存泄漏,哪些操作会造成内存泄漏

  • 内存泄漏:是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束

  • 可能造成内存泄漏的操作:

    • 意外的全局变量
    • 闭包
    • 循环引用
    • 被遗忘的定时器或者回调函数

7、export 与 export default有什么区别

  • export与 export default 均可用于导出常量、函数、文件、模块等
  • 在一个文件或模块中,export、import可以有多个,export default`仅有一个
  • 通过 export 方式导出,在导入时要加 { },export default`则不需要
  • 使用 export default命令,为模块指定默认输出,这样就不需要知道所要加载模块的变量名; export加载的时候需要知道加载模块的变量名
  • export default命令的本质是将后面的值,赋给 default 变量,所以可以直接将一个值写在 export default之后

8、JS怎样添加、移除、替换、插入、复制、创建和查找节点

  • 添加、移除、替换、之前插入、之后插入、复制

    appendChild()
    removeChild()
    replaceChild()
    insertBefore()  
    insertAfter() 
    cloneNode() 
    
  • 创建新节点

    createDocumentFragment() //创建一个DOM片段
    createElement() //创建一个具体的元素
    createTextNode() //创建一个文本节点
    
  • 查找新节点

    document.getElementsByTagName("")    //通过标签名称
    document.getElementsByName("")    //通过元素的Name属性的值
    document.getElementById("")    //通过元素Id,唯一性
    document.getElementsByClassName("");  //通过类查找
    document.querySelector("")  //通过选择器
    

9、比较typeof与instanceof?

相同点:JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的。

  • typeof的定义和用法:返回值是一个字符串,用来说明变量的数据类型。

    • typeof 一般只能返回如下几个结果:number,boolean,string,function,object,undefined。
    • typeof 来获取一个变量是否存在,如 if(typeof a!="undefined"){alert("ok")},而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错。
    • 对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。
  • Instanceof定义和用法:instanceof 用于判断一个变量是否属于某个对象的实例。

    a instanceof b?alert("true"):alert("false"); //a是b的实例?真:假
    
    var a = new Array(); 
    alert(a instanceof Array);  // true
    alert(a instanceof Object)  // true
    如上,会返回 true,同时 alert(a instanceof Object) 也会返回 true;这是因为 Array 是 object 的子类。
    
    function test(){};
    var a = new test();
    alert(a instanceof test)   // true
    

10、如何理解闭包函数?

  • 是一个使函数外部能够调用函数内部定义的变量的函数 ,
  • 也就是当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的其它变量,如果返 回的这个函数在外部被执行,就产生了闭包。
  • 闭包的特性:
    • 函数内再嵌套函数
    • 内部函数可以引用外层的参数和变量
    • 参数和变量不会被垃圾回收机制回收

11、Ajax同步和异步的区别

AJAX中根据async的值不同分为同步(async = false)和异步(async = true)两种执行方式;在W3C的教程中推荐使用异步执行;在默认情况下为异步(true)

  • 异步:不管ajax的执行请求有没有返回,代码会继续往下执行,就好比两条线程同时执行一样。
  • 同步:只有ajax请求完成返回数据之后代码才能继续往下执行,就好比单线程一样。

12、介绍一下ES6的基本特性

ECMAScript 6.0 是JavaScript语言的下一代标准

  • 声明变量的方式 let、const
  • 变量解构赋值
  • 字符串新增方法 includes()、 startsWith()、endsWith()等
  • 数组新增方法 Array.from() 、Array.of()、 entries() 、keys() 、values()等
  • 对象简洁写法以及新增方法 Object.is()、Object.assign()、 `entries()、keys()、 values()等
  • Symbol原始数据类型
  • 箭头函数、rest参数、函数参数默认值等
  • 新的数据结构: Set 和 Map
  • Proxy和Reflect
  • Promise对象,异步编程的一种解决方案
  • Generator函数yield命令和async函数 await命令
  • Class类的用法
  • Module体系 模块的加载和输出方式
原文地址:https://www.cnblogs.com/wangchangli/p/11247718.html