22
2020
05

什么是事件冒泡?

当事件发生在DOM元素上时,该事件并不完全发生在那个元素上。在冒泡阶段,事件冒泡,或者事件发生在它的父代,祖父母,祖父母的父代,直到到达window为止。假设有如下的 HTML 结构:<div class="grandparent">  <div class="parent">    <div class="child">1</div>  </
22
2020
05

什么是事件传播?

当事件发生在DOM元素上时,该事件并不完全发生在那个元素上。在“冒泡阶段”中,事件冒泡或向上传播至父级,祖父母,祖父母或父级,直到到达window为止;而在“捕获阶段”中,事件从window开始向下触发元素 事件或event.target。事件传播有三个阶段:捕获阶段–事件从 window 开始,然后向下到每个元素,直到到达目标元素。目标阶段–事件已达到目标元素。冒泡阶段–事件从目标元素冒泡,然后上升到每个元素,直到到达 window。
22
2020
05

DOM 是什么?

DOM 代表文档对象模型,是 HTML 和 XML 文档的接口(API)。当浏览器第一次读取(解析)HTML文档时,它会创建一个大对象,一个基于 HTM L文档的非常大的对象,这就是DOM。它是一个从 HTML 文档中建模的树状结构。DOM 用于交互和修改DOM结构或特定元素或节点。假设我们有这样的 HTML 结构:<!DOCTYPE html><html lang="en"><head>   <meta char
22
2020
05

使用 + 或一元加运算符是将字符串转换为数字的最快方法吗?

根据MDN文档,+是将字符串转换为数字的最快方法,因为如果值已经是数字,它不会执行任何操作。
22
2020
05

|| 运算符能做什么

||也叫或逻辑或,在其操作数中找到第一个真值表达式并返回它。这也使用了短路来防止不必要的工作。在支持 ES6 默认函数参数之前,它用于初始化函数中的默认参数值。console.log(null || 1 || undefined); // 1function logName(name) {  var n = name || "Mark";  console.log(n);}logName(); // "Mark"
22
2020
05

&& 运算符能做什么

&& 也可以叫逻辑与,在其操作数中找到第一个虚值表达式并返回它,如果没有找到任何虚值表达式,则返回最后一个真值表达式。它采用短路来防止不必要的工作。console.log(false && 1 && []); // falseconsole.log(" " && true && 5); // 5使用if语句const router: Router = Router();router.get(
22
2020
05

undefined 和 null 有什么区别?

在理解undefined和null之间的差异之前,我们先来看看它们的相似类。它们属于 JavaScript 的 7 种基本类型。 let primitiveTypes = ['string','number','null','undefined','boolean','symbol', 'bigint'];它们是属于虚值,可以使用Boolean(value)或!!value将
22
2020
05

有哪些方法可以处理 JS 中的异步代码?

回调Promiseasync/await还有一些库:async.js, bluebird, q, co
22
2020
05

函数表达式和函数声明之间有什么区别?

看下面的例子:hoistedFunc();notHoistedFunc();function hoistedFunc(){  console.log("注意:我会被提升");}var notHoistedFunc = function(){  console.log("注意:我没有被提升");}notHoistedFunc调用抛出异常:Uncaught TypeError: notHoistedFunc is not a functio
22
2020
05

调用函数,可以使用哪些方法?

在 JS 中有4种方法可以调用函数。作为函数调用——如果一个函数没有作为方法、构造函数、apply、call 调用时,此时 this 指向的是 window 对象(非严格模式)  //Global Scope  function add(a,b){    console.log(this);    return a + b;  }  add(1,5); // 打印 "window" 对象和 6&n
22
2020
05

什么是缓存及它有什么作用?

缓存是建立一个函数的过程,这个函数能够记住之前计算的结果或值。使用缓存函数是为了避免在最后一次使用相同参数的计算中已经执行的函数的计算。这节省了时间,但也有不利的一面,即我们将消耗更多的内存来保存以前的结果。
22
2020
05

手动实现缓存方法

function memoize(fn) {  const cache = {};  return function (param) {    if (cache[param]) {      console.log('cached');      return cache[param];    } else {      let
22
2020
05

为什么typeof null 返回 object?如何检查一个值是否为 null?

typeof null == 'object'总是返回true,因为这是自 JS 诞生以来null的实现。曾经有人提出将typeof null == 'object'修改为typeof null == 'null',但是被拒绝了,因为这将导致更多的bug。我们可以使用严格相等运算符===来检查值是否为null。function isNull(value){  return value === null;}
22
2020
05

new 关键字有什么作用?

new关键字与构造函数一起使用以创建对象在JavaScript中。下面看看例子:function Employee(name, position, yearHired) {  this.name = name;  this.position = position;  this.yearHired = yearHired;};const emp = new Employee("Marko Polo", "Software Develope
22
2020
05

你能解释一下 ES5 和 ES6 之间的区别吗?

ECMAScript 5(ES5):ECMAScript 的第 5 版,于 2009 年标准化。这个标准已在所有现代浏览器中完全实现。ECMAScript 6(ES6)或 ECMAScript 2015(ES2015):第 6 版 ECMAScript,于 2015 年标准化。这个标准已在大多数现代浏览器中部分实现。以下是 ES5 和 ES6 之间的一些主要区别:箭头函数和字符串插值:const greetings = (name) => { return `hello ${na
22
2020
05

如何检查一个数字是否为整数?

检查一个数字是小数还是整数,可以使用一种非常简单的方法,就是将它对 1 进行取模,看看是否有余数。function isInt(num) { return num % 1 === 0;}console.log(isInt(4)); // trueconsole.log(isInt(12.2)); // falseconsole.log(isInt(0.3)); // false
22
2020
05

JavaScript 中的 let 关键字有什么用?

除了可以在函数级别声明变量之外,ES6 还允许你使用 let 关键字在代码块({..})中声明变量。
22
2020
05

解释事件冒泡以及如何阻止它?

事件冒泡是指嵌套最深的元素触发一个事件,然后这个事件顺着嵌套顺序在父元素上触发。防止事件冒泡的一种方法是使用 event.cancelBubble 或 event.stopPropagation()(低于 IE 9)。
22
2020
05

解释 JavaScript 中的值和类型。

JavaScript提供两种数据类型: 基本数据类型和引用数据类型基本数据类型有:StringNumberBooleanNullUndefinedSymbol引用数据类型有:ObjectArrayFunction
22
2020
05

编写一个可以执行如下操作的函数。

var addSix = createBase(6);addSix(10); // 返回 16addSix(21); // 返回 27可以创建一个闭包来存放传递给函数 createBase 的值。被返回的内部函数是在外部函数中创建的,内部函数就成了一个闭包,它可以访问外部函数中的变量,在本例中是变量 baseNumber。function createBase(baseNumber) { return function(N) { // 我们在这里访问 baseNumber,即
22
2020
05

解释 JavaScript 中的 null 和 undefined。

JavaScript 中有两种底层类型:null 和 undefined。它们代表了不同的含义:尚未初始化:undefined;空值:null。null和undefined是两个不同的对象, 有图为证:
22
2020
05

“use strict”的作用是什么?

use strict 出现在 JavaScript 代码的顶部或函数的顶部,可以帮助你写出更安全的 JavaScript 代码。如果你错误地创建了全局变量,它会通过抛出错误的方式来警告你。例如,以下程序将抛出错误:function doSomething(val) { "use strict";  x = val + 10;}它会抛出一个错误,因为 x 没有被定义,并使用了全局作用域中的某个值对其进行赋值,而 use strict 不允许这样做。
22
2020
05

解释什么是回调函数,并提供一个简单的例子。

回调函数是可以作为参数传递给另一个函数的函数,并在某些操作完成后执行。下面是一个简单的回调函数示例,这个函数在某些操作完成后打印消息到控制台。function modifyArray(arr, callback) { // 对 arr 做一些操作 arr.push(100); // 执行传进来的 callback 函数 callback();}var arr = [1, 2, 3, 4, 5];modifyArray(arr, function() {&n
22
2020
05

解释 JavaScript 中的相等性。

JavaScript 中有严格比较和类型转换比较:严格比较(例如 ===)在不允许强制转型的情况下检查两个值是否相等;抽象比较(例如 ==)在允许强制转型的情况下检查两个值是否相等。var a = "42";var b = 42;a == b; // truea === b; // false一些简单的规则:如果被比较的任何一个值可能是 true 或 false,要用 ===,而不是 ==;如果被比较的任何一个值是这些特定值(0、“”或 []),要用 ===,而不是 ==;在
22
2020
05

JavaScript 中的作用域(scope)是指什么?

在 JavaScript 中,每个函数都有自己的作用域。作用域基本上是变量以及如何通过名称访问这些变量的规则的集合。只有函数中的代码才能访问函数作用域内的变量。同一个作用域中的变量名必须是唯一的。一个作用域可以嵌套在另一个作用域内。如果一个作用域嵌套在另一个作用域内,最内部作用域内的代码可以访问另一个作用域的变量。
22
2020
05

JavaScript 中的强制转型是指什么?

在 JavaScript 中,两种不同的内置类型间的转换被称为强制转型。强制转型在 JavaScript 中有两种形式:显式和隐式。这是一个显式强制转型的例子:var a = "42";var b = Number( a );a; // "42"b; // 42 -- 是个数字!这是一个隐式强制转型的例子:var a = "42";var b = a * 1; // "42" 隐式转型成 42 a; //
21
2020
05

解释for-in循环?

for-in循环用于循环对象的属性。for-in循环的语法是:在每次循环中,来自对象的一个属性与变量名相关联,循环继续,直到对象的所有属性都被耗尽。
21
2020
05

描述JavaScript中的匿名函数?

被声明为没有任何命名标识符的函数被称为匿名函数。一般来说,匿名函数在声明后无法访问。匿名函数声明:
21
2020
05

call()和.apply()之间有什么区别?

函数.call()和.apply()在使用上非常相似,只是有一点区别。当程序员知道函数参数的编号时,使用.call(),因为它们必须在调用语句中被提及为参数。另一方面,当不知道数字时使用.apply(),函数.apply()期望参数为数组。.call()和.apply()之间的基本区别在于将参数传递给函数。它们的用法可以通过给定的例子进行说明。
21
2020
05

定义事件冒泡?

JavaScript允许DOM元素嵌套在一起。在这种情况下,如果单击子级的处理程序,父级的处理程序也将执行同样的工作。
21
2020
05

什么样的布尔运算符可以在JavaScript中使用?

“And”运算符(&&),'Or'运算符(||)和'Not'运算符(!)可以在JavaScript中使用。*运算符没有括号。
21
2020
05

如何分配对象属性?

将属性分配给对象的方式与赋值给变量值相同。例如,表单对象的操作值以下列方式分配为“‘submit”:Document.form.action =“submit”
21
2020
05

在JavaScript中读取和写入文件的方法是什么?

可以通过使用JavaScript扩展(从JavaScript编辑器运行),打开文件的示例来完成:fh = fopen(getScriptPath(), 0);
21
2020
05

在JavaScript中如何使用DOM?

DOM代表文档对象模型,并且负责文档中各种对象的相互交互。DOM是开发网页所必需的,其中包括诸如段落,链接等对象。可以操作这些对象以包括添加或删除等操作,DOM还需要向网页添加额外的功能。除此之外,API的使用比其他更有优势。
21
2020
05

JavaScript中如何使用事件处理程序?

事件是由用户生成活动(例如单击链接或填写表单)导致的操作。需要一个事件处理程序来管理所有这些事件的正确执行。事件处理程序是对象的额外属性。此属性包括事件的名称以及事件发生时采取的操作。
21
2020
05

解释延迟脚本在JavaScript中的作用?

默认情况下,在页面加载期间,HTML代码的解析将暂停,直到脚本停止执行。这意味着,如果服务器速度较慢或者脚本特别沉重,则会导致网页延迟。在使用Deferred时,脚本会延迟执行直到HTML解析器运行。这减少了网页加载时间,并且它们的显示速度更快。
21
2020
05

JavaScript中的各种功能组件是什么?

JavaScript中的不同功能组件是:First-class函数:JavaScript中的函数被用作第一类对象。这通常意味着这些函数可以作为参数传递给其他函数,作为其他函数的值返回,分配给变量,也可以存储在数据结构中。嵌套函数:在其他函数中定义的函数称为嵌套函数。
21
2020
05

decodeURI()和encodeURI()是什么?

EncodeURl()用于将URL转换为十六进制编码。而DecodeURI()用于将编码的URL转换回正常。
21
2020
05

如何在不支持JavaScript的旧浏览器中隐藏JavaScript代码?

在<script>标签之后的代码中添加“<! - ”,不带引号。在<script>标签之前添加“// - >”代码中没有引号。旧浏览器现在将JavaScript代码视为一个长的HTML注释。而支持JavaScript的浏览器则将“<! - ”和“// - >”作为一行注释。
21
2020
05

什么时候触发垃圾回收?

垃圾回收器周期性运行,如果分配的内存非常多,那么回收工作也会很艰巨,确定垃圾回收时间间隔就变成了一个值得思考的问题。IE6的垃圾回收是根据内存分配量运行的,当环境中的变量,对象,字符串达到一定数量时触发垃圾回收。垃圾回收器一直处于工作状态,严重影响浏览器性能。IE7中,垃圾回收器会根据内存分配量与程序占用内存的比例进行动态调整,开始回收工作。
15
2020
05

什么是Cookie 隔离?(或者:请求资源的时候不要带cookie怎么做)

通过使用多个非主要域名来请求静态文件,如果静态文件都放在主域名下,那静态文件请求的时候带有的cookie的数据提交给server是非常浪费的,还不如隔离开。因为cookie有域的限制,因此不能跨域提交请求,故使用非主要域名的时候,请求头中就不会带有cookie数据,这样可以降低请求头的大小,降低请求时间,从而达到降低整体请求延时的目的。同时这种方式不会将cookie传入server,也减少了server对cookie的处理分析环节,提高了server的http请求的解析速度。
15
2020
05

有效的javascript变量定义规则

第一个字符必须是一个字母、下划线(_)或一个美元符号($);其他字符可以是字母、下划线、美元符号或数字。