JavaScript考试题(二)

简介: JavaScript考试题(二)

一.Js中如何对dom元素进行删除和复制呢


①父元素.removeChild(子元素);
②被复制的元素.cloneNode(bool);bool是一个布尔值
   1或true:表示复制元素本身以及复制该元素下的所有子元素。

  0或false:表示仅仅复制元素本身,不复制该元素下的子元素。

 

二.Js垃圾回收机制是什么请简述


①概念

js的垃圾回收机制是为了防止内存泄漏(已经不需要的某一块内存还一直存在着),垃圾回收机制就是不停歇的寻找这些不再使用的变量,并且释放掉它所指向的内存。

在JS中,JS的执行环境会负责管理代码执行过程中使用的内存。

②变量的生命周期

当一个变量的生命周期结束之后,它所指向的内存就会被释放。js有两种变量,局部变量和全局变量,局部变量是在他当前的函数中产生作用,当该函数结束之后,该变量内存会被释放,全局变量的话会一直存在,直到浏览器关闭为止

③js垃圾回收方式有两种方式: 标记清除、引用计数

标记清除:

大部分浏览器使用这种垃圾回收,当变量进入执行环境(声明变量)的时候,垃圾回收器将该变量进行了标记,当该变量离开环境的时候,将其再度标记,随之进行删除。

引用计数:

这种方式常常会引起内存的泄露,主要存在于低版本的浏览器。它的机制就是跟踪某一个值得引用次数,当声明一个变量并且将一个引用类型赋值给变量得时候引用次数加1,当这个变量指向其他一个时引用次数减1,当为0时出发回收机制进行回收


三.请说出你对this的理解


①this的概述


this是Javascript语言的一个关键字,它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用


②this指向

   1.与事件体连用,代表触发事件的元素本身

   2.与普通函数连用,代表调用该函数的对象

   3.与构造函数连用时,代表new出来的对象

   4.与箭头函数连用时,箭头函数没有this 是,他的this是他父元素的前缀


③修改this指向的方式  

1.使用that

   2.使用.bind( )

       Object.bind(this,obj1,obj2,obj3) :如果 bind 的第一个参数为空,则默认指向全局对象

       bind()方法只会返回一个函数,并不会执行函数。

 3.使用.apply()

       Object.apply(this,arguments):apply 只能写两个参数,第一个参数表示改变后的调用这个函数的对象,即this要指向的对象;第二个参数是一个数组,用于存放要传的参数,可以用arguments获得。如果 apply 的第一个参数为空,则默认指向全局对象

   4.使用.call()

       Object.call(this,obj1,obj2,obj3) :call 可以写多个参数,第一个参数表示改变后的调用这个函数的对象,即this要指向的对象;如果 call 的第一个参数为空,则默认指向全局对象


四.函数的节流和防抖请描述


      节流就是减少流量,将频繁触发的事件减少,并每隔一段时间执行。即,控制事件触发的频率

防抖就是防止抖动,避免事件的重复触发


五.DOM怎样添加、移除、移动、复制、创建和查找节点


①创建  :document.createElement("标签名")  返回值:创建好的标签


②尾部追加 :父节点.appendChild(子节点)  返回值:无


③删除: 节点.remove()   父节点.removeChild(子节点)  返回值:无


④插入(eg: 在第2个之前插入一个创建好的节点)


语法:父节点.insertBefore(新节点,谁的前面的那个谁)  返回值:无


⑤替换 (eg: 创建一个新的,把 原有的替换掉)


语法: 旧节点父节点.replaceChild(新节点,旧节点)  返回值:无


⑥克隆节点:节点.cloneNode(true/false) ()内什么都不写,默认就是false


注意点:true代表克隆自身标签以及后代的所有内容


false只代表克隆自身标签  返回值:克隆出来的


六.解释一下什么是 promise ?包含状态与方法


①Promise的概念


Promise是ES6提供的原生的类(构造函数), 用来传递异步操作的消息。它代表了某个未来才会知道结果的事件(通常是一个异步操作)


②Promise的两个特点

   1.对象的状态不受外界影响

       Promise 有三种状态:Pending(进行中)、Resolved(已完成,又称 Fulfilled)和                    Rejected(已失败)

   2.一旦状态改变,就不会再变

       状态改变,只有两种可能:从 Pending 变为 Resolved 和从 Pending 变为 Rejected


③Promise的作用:解决回调地狱的问题

④Promise类的方法:


   1. 对象方法:then,catch

then方法:

功能:把then方法的参数传给resolve和reject。 promise对象.then(resolve回调函数,reject回调函数);

参数:then方法的第一个参数是resolvethen方法的第二个参数是reject。

返回值:promise对象本身,所以,then调用完毕后,还可以继续调用then(即:链式调用)

Promise中then方法的数据传递

上一个then的返回值(结果)是下一个then的参数(输入)

catch方法:

它和then的第二个参数一样,用来指定reject的回调

2.类方法: all ,race

all方法:

功能: Promise.all可以并行执行多个异步操作,并且在一个回调中处理所有的返回数据。返回的数据与传的参数数组的顺序是一样的。当所有的异步操作都成功才表示成功 。

参数:数组。数组里是若干个返回promise对象的函数(异步操作);

返回值:promise对象。promise对象的then方法的回调函数的参数是 所有promise对象的resolve的参数(数组形式)

用Promise.all来执行,all接收一个数组参数,两个异步操作是并行执行的,等到它们都执行完后才会进到then里面。而两个异步操作返回的数据都在then里面,all会把所有异步操作的结果放进一个数组中传给then,就是上面的results

race方法:

功能:也是并发,但是,与all不同之处时,当一个异步操作完成(resolve或reject)时,就调用方法了。即:多个异步操作,同时执行,谁快就用谁的结果,所以,结果不再是数组。


⑤总结Promise的使用步骤


1、找到(曾经的)异步操作的代码,放在Prmoise构造函数的参数(函数)里 2、参数(函数)的第一个参数resolve是成功时调用的函数,对应then方法(函数)的第一个参数 3、参数(函数)的第二个参数reject是失败时调用的函数,对应then方法(函数)的第二个参数


七.解释一下JS的展开操作符?什么是解构?


展开操作符...作用就是展开数组或字符串为一个新数组。

解构就是按照一定的模式或者规则,在数组和对象中提取值,并且对变量进行赋值的操作。优点:简洁易读,语义清晰明了,也方便在复杂数据中对数据字段的获取。


八.如何判断数据的类型是否是数组类型?有哪些方法?


①typeof 判断变量类型:在JS中数组是一种特殊的对象, typeof 方法会返 Object

② Array.isArray 判断变量类型:返回值为布尔值,如果是数组则为 true,否则false

③ instanceof 判断数组类型:实例化一个对象时,该对象的原型链中包含它所属类的原型对象,利用这个特性,可以使用 instanceof 来判断该对象是否为数组类型

 

九.Dom操作的api有哪些?


①节点查找相关的API:


document.getElementById ;//根据ID查找元素,大小写敏感,有多个结果,返回第一个 document.getElementsByClassName ;//根据类名查找元素,多个类名用空格分隔,返回一个 document.getElementsByTagName ;//根据标签查找元素,表示查询所有标签,返回一个 document.getElementsByName ;//根据元素的name属性查找,返回一个 NodeList document.querySelector ;//返回单个Node,如果匹配到多个结果,只返回第一个 document.querySelectorAll ;//返回一个 NodeList


②节点创建修改相关的API:


创建  :document.createElement("标签名")  返回值:创建好的标签


尾部追加 :父节点.appendChild(子节点)  返回值:无


删除: 节点.remove()   父节点.removeChild(子节点)  返回值:无


插入:父节点.insertBefore(新节点,谁的前面的那个谁)  返回值:无


替换 : 旧节点父节点.replaceChild(新节点,旧节点)  返回值:无


克隆节点:节点.cloneNode(true/false)


③节点关系API:


父找子: childNodes   children   firstElementChild     lastElementChild


子找父: parentNode


兄弟节点: nextElementSibling   previousElementSibling


相关文章
|
7月前
|
前端开发 JavaScript
JavaScript考试题(一)
JavaScript考试题(一)
|
20天前
|
存储 人工智能 自然语言处理
【JavaScript】JavaScript基础详解(文末送书)
【JavaScript】JavaScript基础详解(文末送书)
|
5月前
|
存储 前端开发 JavaScript
5 个 实用的 JavaScript 开发小技巧
5 个 实用的 JavaScript 开发小技巧
197 0
|
6月前
|
前端开发 JavaScript 开发者
JavaScript 基础第三天笔记
JavaScript 基础第三天笔记
25 0
|
7月前
|
前端开发 JavaScript 安全
JavaScript考试题 (三)
JavaScript考试题 (三)
|
9月前
|
JavaScript 前端开发
JavaScript 第一课
JavaScript 第一课
55 0
|
11月前
|
自然语言处理 JavaScript 前端开发
JavaScript百炼成仙 1.19 JavaScript编译原理
JavaScript百炼成仙 1.19 JavaScript编译原理
|
11月前
|
JavaScript 前端开发
javascript百炼成仙 第一章 掌握JavaScript基础 1.12 JavaScript运算符
javascript百炼成仙 第一章 掌握JavaScript基础 1.12 JavaScript运算符
114 0
|
缓存 JavaScript 前端开发
JavaScript冷门知识
JavaScript冷门知识
213 0
|
JavaScript 前端开发 测试技术
JavaScript温故而知新
JavaScript温故而知新
89 0