前端面试之js篇整理(一)

js的基本类型有哪些?引用类型有哪些?null和undefined的区别

js变量的值有两种:
1.基本类型值:存放在栈内存的简单数据类型。如Number、String 、Boolean、Null和Undefined这物种
2.引用类型值:存放在堆内存的中的对象。如Object 、Array 、Function 、Data

null :表示变量不存在,常常用作函数返回一个不存在的对象
Undefined:存在但是未定义,比如变量声明没有赋值,该变量就是undefined;调用函数中需要提供的参数没有提供,该参数就是undefiend;函数没有返回值,接收这个函数的变量就是Undefined等等

如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种)

先说一下。检测类型的操作符typeof 它可以检测出string、function、object、number等,但是检测不了Array,检测Array,返回的值是’object’

所以需要使用其他方法去检测是否为数组类型:

  1. ES5提供了Array.isArray(‘要检测的变量’)方法,如果是,返回true
  2. Object.prototype.toString.call(要检测的变量),数组返回”[object Array]”
  3. 从构造函数入手,obj instanceof Array

    是否为数字类型

1.使用typeof
2.使用isNaN

JS常见的dom操作api

  1. DOM的创建 : document.createElement('div')
  2. DOM的查询:

    //DOM的查询获取
    var el = document.getElementById('xxx');
    //获取父元素、父节点
    var parent = ele.parentNode;//只读,没有兼容性问题
    //获取子节点:
    var nodes = ele.childNodes;
    //当前元素的第一个/最后一个子元素节点
    var el = ele.firstChild;
    
  3. DOM的更改

    // 添加、删除子元素
    ele.appendChild(el);
    ele.removeChild(el);
    // 替换子元素
    ele.replaceChild(el1, el2);
    
    // 插入子元素
    parentElement.insertBefore(newElement, referenceElement);
    
    //克隆元素
    ele.cloneNode(true) //该参数指示被复制的节点是否包括原节点的所有属性和子节点
  4. 属性操作

    // 获取一个{name, value}的数组
    var attrs = el.attributes;

    还有获取、设置标签属性:getAttributesetAttribute;判断、移除标签属性hasAttribute removeAttribute

解释一下事件冒泡和事件捕获

 一个完整的JS事件流是从window开始,最后回到window的一个过程
    事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件。相反的,事件冒泡是自下而上的去触发事件。

先说一下事件捕获:事件是从最上层也是最不精确的对象document开始进行触发,然后到代码指定的精确元素去触发
ele.addEventListener(事件,function,boolean)

假如父级有点击事件,子级也有点击事件,如果是设置了addEventListener最后一个参数为true,点击时候,就会先执行父级,在执行子级。。。

如果第3个参数设置为true,那么事件在捕获阶段就开始触发
设置为false,在冒泡阶段触发

假如父级有点击事件,子级也有点击事件,如果是设置了addEventListener最后一个参数为false,点击时候,就会先执行子级,在执行父级。。。
并且在子级的时候可以组织向上冒泡,最终结果就是只执行子级的点击事件
可以使用e.stopPropagation();

对闭包的理解?什么时候构成闭包?闭包的实现方法?闭包的优缺点?

闭包从形式上来看是 function return function;

我们都知道js中的变量有全局变量和局部变量两种,根据圆形链,子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立;function内的局部变量 可以通过 function return function 拿到全局去操作,这形成了闭包

缺点:
function是属于引用类型,所以函数内是存放在堆内存中;如果将函数的私有变量return 出来,就会造成内存的泄露

猜你喜欢

转载自blog.csdn.net/connie_0217/article/details/80014160