ReferenceError: 引用了未定义的变量或对象 TypeError: 类型错误 URIError: URI操作错误 SyntaxError: 语法错误 (这个错误WebIDL中故意省略,保留给...ES解析器使用) Error: 普通异常,通常与 throw 语句和 try/catch 语句一起使用,利用属性 name 可以声明或了解异常的类型,利用message 属性可以设置和读取异常的详细信息...,而 try-catch 则是用于在可预见的情况下监控特定的错误。...().catch(cb) 优点: 可以捕获 Promise 的拒绝(失败)状态,并执行相应的错误处理逻辑 可以很方便地处理 Promise 的成功和失败回调 缺点: 无法捕获 Promise 内部的同步异常...,只能捕获到 Promise 对象本身的异常 无法捕获到其他异步操作中的错误,例如网络请求失败等。
一些方法: history.back() - 等同于在浏览器点击后退按钮 history.forward() - 等同于在浏览器中点击前进按钮 history.go() - go() 方法可加载历史列表中的某个具体的页面...该参数可以是数字,使用的是要访问的 URL 在 History 的 URL 列表中的相对位置。(-1上一个页面,1前进一个页面)。....style.backgroundColor="red"; ---- js中的location对象 Location 对象存储在 Window 对象的 Location 属性中,表示那个窗口中当前显示的文档的...---- Promise的done与扩展always(或者说finally) done Promise 对象的回调链,不管以then方法或catch方法结尾,要是最后一个方法抛出错误,都有可能无法捕捉到...3、当用apply和call上下文调用的时候指向传入的第一个参数 4、构造函数调用指向实例对象 JS中this关键字, 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用 全局函数调用时
在「flex」属性中该值如果被省略则默认为「0%」 在「flex」属性中该值如果被指定为「auto」,则伸缩基准值的计算值是自身的 设置,如果自身的宽度没有定义,则长度取决于内容...答: 闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取[局部变量],所以闭包可以理解成“定义在一个[函数]内部的函数“。...undefined 是 Undefined 类型的唯一值,它表示未定义的值。当声明变量未赋值时,或者定义属性未设置值时,默认值都为 undefined。 *问题:promise是什么?...只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。...2.复杂组件变得难以理解,生命周期钩子中充满大量数据请求,计时器订阅等,无法拆分,还有在componentWillUnmount中清除,使人不好理解,hooks 的useEffect可将逻辑细粒拆分。
作者:FishStudy520 https://segmentfault.com/a/1190000038323321 前言 在开发中,有时,我们花了几个小时写的js 代码,在浏览器调试一看,控制台一堆红...TypeError: Cannot read property 'x' of undefined TypeError: Cannot set property 'x' of undefined 含义:无法读取属性...‘x’, 无法设置属性 'x' 为什么报错?...访问或设置未定义(undefined)或null值的属性时会发生这种报错。...name) throw new Error('用户名无效'); return name; } getUserName() Promise 的异常处理,Promise执行中,本身自带try...
在开发中,有时,我们花了几个小时写的Js 代码,在游览器调试一看,控制台一堆红,瞬间一万头草泥马奔腾而来。...TypeError: Cannot read property 'x' of undefined TypeError: Cannot set property 'x' of undefined 含义:无法读取属性...‘x’, 无法设置属性 'x' 为什么报错?...访问或设置未定义(undefined)或null值的属性时会发生这种报错。...name) throw new Error('用户名无效'); return name; } getUserName() Promise 的异常处理,Promise执行中,本身自带try...catch
常见错误的分类 对于用户在访问页面时发生的错误,主要包括以下几个类型: 1、js运行时错误 JavaScript代码在用户浏览器中执行时,由于一些边界情况、本地环境的不可控等因素,可能会存在js运行时错误...3、未处理的promise错误 未使用catch捕获的promise错误,往往都会存在比较大的风险。而编码时有可能覆盖的不够全面,因此有必要监控未处理的promise错误并进行上报。...另外在安卓4.4及以下版本的webview中,xhr对象也不存在responseURL属性。 因此我们需要额外的改写xhr的open方法,将传入的url记录下来,方便上报时带上。...因此,浏览器只允许同域下的脚本捕获具体错误信息,而其他脚本只知道发生了一个错误,但无法获知错误的具体内容。 解决方案1:(推荐) 添加 crossorigin="anonymous" 属性。...完成上述两步之后,即可通过 window.onerror 捕获跨域脚本的报错信息。 解决方案2 难以在 HTTP 请求响应头中添加跨域属性时,还可以考虑 try catch 这个备选方案。
处理异常的意义 随着网页项目越来越复杂,许多异常报错很难在开发和测试阶段被发现,尽管你可能避开了语法等常规错误,但不可避免的是代码在运行时的错误你仍旧无法准确预料,假设现在有如下一段 Vue 代码,它在生命周期的...所以该如何应对并处理可能发生的某些错误,成为了前端开发的一门必修课,你当然可以在每个代码片段中重复编写 try...catch......('vue异常错误捕获: ', '错误发生在 ' + info) } 图片 可以看到异常成功被捕获了,因为我们模拟了一个数据错误导致渲染出错,所以错误发生在 render 层,如果是在函数中的 Promise...宏任务中的错误也是无法捕获的: ....... fetch() { return new Promise((resolve) => { setTimeout(() => { asd...本文介绍了如何简单地在 Vue 中全局捕获异常错误,提升代码健壮性,且能避免在代码中编写大量异常捕获块,同时也减少了出错时控制台的大片飘红报警,收集错误可以帮助我们定位开发与测试阶段不易发现的疑难杂症,
e.g: 下图是当使用了未定义的变量"foo",导致产生js运行时错误时的上报数据: 2、资源加载错误 这里的静态资源包括js、css以及image等。...e.g: 下图是图片资源不存在时的上报数据: 3、未处理的promise错误 未使用catch捕获的promise错误,往往都会存在比较大的风险。...另外在安卓4.4及以下版本的webview中,xhr对象也不存在responseURL属性。 因此我们需要额外的改写xhr的open方法,将传入的url记录下来,方便上报时带上。...因此,浏览器只允许同域下的脚本捕获具体错误信息,而其他脚本只知道发生了一个错误,但无法获知错误的具体内容。 解决方案1:(推荐) 添加 crossorigin="anonymous" 属性。...完成上述两步之后,即可通过 window.onerror 捕获跨域脚本的报错信息。 解决方案2 难以在 HTTP 请求响应头中添加跨域属性时,还可以考虑 try catch 这个备选方案。
js的防抖和节流是什么? 数组中常用的方法有哪些? 怎么判断一个object是否是数组? 继承有哪些方式? 说说js中call,apply,bind之间的关系? 你了解promise吗?...这里涉及到对函数作用域的认识: js变量分为全局变量和局部变量;函数内部可以直接读取全局变量,而在函数外部自然无法读取函数内的局部变量 闭包解决了什么问题 可以读取函数内部的变量 让这些变量的值始终保持在内存中...这两个私有项无法在匿名函数外部直接访问,必须通过匿名包装器返回的对象的三个公共函数访问。 闭包的缺点 由于闭包会是的函数中的变量都被保存到内存中,滥用闭包很容易造成内存消耗过大,导致网页性能问题。...for...of不能循环普通的对象,需要通过和Object.keys()搭配使用 推荐在循环对象属性的时候,使用for...in,在遍历数组的时候的时候使用for...of new一个对象,这个过程中发生了什么...父类的私有属性被所有实例共享 call、apply、bind之间的关系 这又是一个面试经典问题, 也是ES5中众多坑中的一个,在 ES6 中可能会极大避免 this 产生的错误,但是为了一些老代码的维护
continue } // 获取 vite.config.ts 对应的配置项 const existing = merged[key] // 如果在配置文件中未定义...插件及钩子 我们知道,在 resolveConfig 阶段会去调用插件的 config 和 configResolved 钩子。钩子的执行顺序依赖插件中声明的 enforce 属性。...可以定义一个属性值,比如 { apply: 'build' },则只在构建下使用该插件 } else { return p.apply === command } })...定义 { apply: 'build' },说明它只在 build 阶段被调用。...,就会被添加到 env 中,这个一般可以在启动 vite 时去设置环境变量; 然后依次读取环境变量文件,使用 dotenv[6] 去解析,使用 dotenv-expand[7] 去扩散。
在JavaScript中读取文件的方法是什么 读取服务器中的文件内容 function readAjaxFile(url) { // 创建xhr var xhr = new XMLHttpRequest...什么是未声明和未定义的变量 未声明的变量出现中不存在且未声明的变量。如果程序尝试读取未声明变量的值,则会遇到运行时错误。...xxx is not defined 未定义的变量是在程序中声明但尚未给出任何值的变量。如果程序尝试读取未定义变量的值,则返回未定义的值。...说说JavaScript中的匿名函数 被声明为没有任何命名标识符的函数,一般来说,匿名函数在声明后无法访问。...在JavaScript中的继承是如何工作的 在子构造函数中,将父类的构造函数在子类的作用域中执行 在子类的原型中,复制父类构造函数原型上的属性方法 JavaScript是如何实现继承的(六种方式)
在 js 中我们使用构造函数来创建一个新的对象,每个构造函数内部都有一个 prototype 属性值,这个属性值是一个对象,这个对象包含了可以由该构造函数的所有实例共享的属性和方法。...子类构建时不能向父类传参 //在构造函数中,一般很少有数组形式的引用属性,大部分情况都是:基本属性 + 方法。...无法传递参数 5、寄生式继承 核心:在原型式继承的基础上,增强对象,返回构造函数....Javascript 语言的特殊之处,就在于函数内部可以直接读取全局变量。 在函数外部自然无法读取函数内的局部变量,函数内部声明变量的时候,一定要使用 var 命令。...f1 中的局部变量,那么只要把 f2 作为返回值,我们不就可以在 f1 外部读取它的内部变量了吗!
、RegExp、Error) Symbol 应用场景 唯一化对象属性名:属性名属于Symbol类型,就都是独一无二的,可保证不会与其他属性名产生冲突 消除魔术字符串:在代码中多次出现且与代码形成强耦合的某一个具体的字符串或数值...()或toString()显式转为字符串 Symbol值作为对象属性名时,此属性是公开属性,但不是私有属性 Symbol值作为对象属性名时,只能用方括号运算符([])读取,不能用点运算符(.)读取 Symbol...() { super(); }定义继承父类,没有书写则显示定义 子类继承父类:子类使用父类的属性方法时,必须在构造函数中调用super(),否则得不到父类的this 实例:类相当于实例的原型,所有在类中定义的属性方法都会被实例继承...(this) 箭头函数:this.mothod = () => this.mothod() 属性定义位置 定义在构造函数中并使用this指向 定义在类最顶层 new.target:确定构造函数是如何调用...(全部加载) 影响:只有运行时才能得到这个对象,导致无法在编译时做静态优化 编译时加载 定义:直接从模块中获取需要的属性和方法进行加载(按需加载) 影响:在编译时就完成模块加载,效率比其他方案高,但无法引用模块本身
(符号),null(空),undefined(未定义)在内存中占据固定大小,保存在栈内存中 引用类型(复杂数据类型): Object(对象)、Function(函数)。...保存在堆内存中,栈内存存储的是对象的变量标识符以及对象在堆内存中的存储地址。...使用场景: Symbol:使用Symbol来作为对象属性名(key) 利用该特性,把一些不需要对外操作和访问的属性使用Symbol来定义 BigInt:由于在 Number 与 BigInt 之间进行转换会损失精度...1.全局作用域:代码在程序的任何地方都能被访问,window 对象的内置属性都拥有全局作用域。...优点是可以读取函数内部的变量,让这些变量的值始终保存在内存中,不会在函数被调用之后自动清除 闭包形成的条件: 函数的嵌套 内部函数引用外部函数的局部变量,延长外部函数的变量生命周期 闭包的用途
同源策略限制以下几种行为: Cookie、LocalStorage 和 IndexDB 无法读取 DOM 和 Js 对象无法获得 AJAX 请求不能发送 跨域解决方案 通过 jsonp(只能 GET)...而如果发起请求的时间在 expires 限定的时间之内,浏览器会直接读取本地缓存数据库中的信息(from memory or from disk),两种方式根据浏览器的策略随机获取。...并且返回 304 状态码,浏览器就读取本地缓存服务器中的数据。...只要栈中的代码执行完毕,主线程就会去读取"任务队列",依次执行那些事件所对应的回调函数。...复制1 2 3 4 5func.call(this, arg1, arg2); func.apply(this, [arg1, arg2]) //在ES6中可以利用rest参数 func.call
按需加载 AngularJS 的 Controller 多视图应用 AngularJS 通过路由支持多视图应用, 可以根据路由动态加载所需的视图, 在 AngularJS 的文档中有详细的介绍, 网上也有不少教程...模块在加载的过程中什么都没做, 可以按照任意顺序加载, 因此脚本加载器可以使用这个特性进行并发加载。...AngularJS 在 $routeProvider 的文档中, when 方法的 route 参数有这样一个属性: resolve - {Object....// resolver 是一个函数, 返回一个 promise 对象; resolver: ['$q', '$rootScope', function($q, $rootScope...) { // 创建一个延迟执行的 promise 对象 var defered = $q.defer();
数组去重实现的基本原理如下:① 初始化一个空数组② 将需要去重处理的数组中的第1项在初始化数组中查找,如果找不到(空数组中肯定找不到),就将该项添加到初始化数组中③ 将需要去重处理的数组中的第2项在初始化数组中查找...,如果找不到,就将该项继续添加到初始化数组中④ ……⑤ 将需要去重处理的数组中的第n项在初始化数组中查找,如果找不到,就将该项继续添加到初始化数组中⑥ 将这个初始化数组返回var newArr = arr.reduce...Promise.thenthen 方法返回一个新的 promise 实例,为了在 promise 状态发生变化时(resolve / reject 被调用时)再执行 then 里的函数,我们使用一个...我们可以将传给 then 的函数和新 promise 的 resolve 一起 push 到前一个 promise 的 callbacks 数组中,达到承前启后的效果:承前:当前一个 promise 完成后...,但注册到了不同的 callbacks 数组中,因为每次 then 都返回新的 promise 实例(参考上面的例子和图)注册完成后开始执行构造函数中的异步事件,异步完成之后依次调用 callbacks
// 在javascrpt中我们可以通过eval或者new Function的方式来将一个字符串转换成js代码来运行。...不过在node中并没有选用他们来实现模块化,原因也很简单因为他们都有一个致命的问题,就是都容易被不属于他们的变量所影响。...// 如下str字符串中并没有定义a,但是确可以使用上面定义的a变量,这显然是不对的,在模块化机制中,str字符串应该具有自身独立的运行空间,自身不存在的变量是不可以直接使用的// const a =...(id) { this.id = id; // 读取到的文件内容会放在exports中 this.exports = {};}Module....然后通过new Module实例化的方式创建module对象,将模块的绝对路径存储在module的id属性中,在module中创建exports属性为一个json对象// 使用tryModuleLoad
服务器在返回资源的时候,在头信息中添加了 Etag 属性,这个属性是资源生成的唯一标识符,当资源发生改变的时候,这个值也会发生改变。...缺点加载非 ESM 的第三方模块比较复杂;因为模块最终都被打包到全局中,所以无法实现 HMR;浏览器环境中,代码拆分功能必须使用 Require.js 这样的 AMD 库我们发现如果我们开发的是一个应用程序...(f1); console.log(f2) ;};asyncFun(func);在执行的过程中,判断一个函数的promise是否完成,如果已经完成,将结果传入下一个函数,继续重复此步骤每一个 next...,实际上执行的是 logHandler.get :在控制台输出信息,并且读取被代理对象 target 的属性。...单次切换消耗的时间是非常少的,但是如果频繁地大量切换,那么就会产生性能问题比如下面的测试代码,循环读取一百万次 DOM 中的 body 元素的耗时是读取 JSON 对象耗时的 10 倍。
在大多数操作系统中,打开文件以从中读取的程序在完成读取后需要记住关闭这些文件,因此这个假设的迭代器将确保在next()方法返回其中的最后一个单词后关闭文件。...对于典型的迭代器和生成器,如果value属性被定义,则done属性未定义或为false。如果done为true,则value为未定义。...注意 在前一节中,当我们在常规的同步可迭代的 Promise 数组上使用for/await时,我们正在处理同步迭代器结果对象,其中value属性是一个 Promise 对象,但done属性是同步的。...例如,下面的代码使用 Proxy 创建了一个目标对象的只读包装器。当代码尝试从对象中读取值时,这些读取会正常转发到目标对象。...¹ V8 JavaScript 引擎中的一个错误意味着这段代码在 Node 13 中无法正常工作。
领取专属 10元无门槛券
手把手带您无忧上云