首页
学习
活动
专区
圈层
工具
发布

一文详聊前端异常原理

TypeError TypeError 在对值进行不合理操作时会发生,比如试图对一个非函数类型的值进行函数调用,或者引用 null 或 undefined 类型的值中的属性,那么引擎会抛出这种类型的异常...当编译器检测到一个函数调用是尾递归的时候,它就覆盖当前的活动记录而不是在栈中去创建一个新的。 5. Error 与自定义异常 Error 是所有错误的基类,其他错误类型继承该类型。...比如上文提到的 React 自定义异常; 一个健壮的函数,会对参数进行类型有效性判断;通常在实参不合理时,为了避免报错阻断程序运行,开发者会通过默认值,return 空等方式处理。...主要注意的是,Promise 的 catch 方法用于处理 rejected 状态,而非处理异常。Rejected 状态未处理的话会触发 Uncaught Rejection....invariant=1 《Js 高级程序设计 第四版》 《你不知道的 JS》

2.7K40

一篇文章教你如何捕获前端错误

e.g: 下图是图片资源不存在时的上报数据: ? 3、未处理的promise错误 未使用catch捕获的promise错误,往往都会存在比较大的风险。...而编码时有可能覆盖的不够全面,因此有必要监控未处理的promise错误并进行上报。 e.g: 下图是promise请求接口发生错误后,未进行catch时的上报数据: ?...Event接口的error事件,并执行该元素上的onerror()处理函数。...当网站请求并执行一个托管在第三方域名下的脚本时,就可能遇到该错误。最常见的情形是使用 CDN 托管 JS 资源。 其实这并不是一个 JavaScript Bug。.../v2/api/index.html#errorHandler 6.React的componentDidCatch: https://reactjs.org/blog/2017/07/26/error-handling-in-react

5.4K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JavaScript错误处理完全指南

    SyntaxError TypeError URIError 请记住,所有这些错误类型都是 实际的构造函数,旨在返回一个新的错误对象。...; throw null; 但最好避免这些事情,始终抛出正确的错误对象,而不是基元。这样,你就可以在代码库中保持错误处理的一致性。...例如,将来的 Node.js 将使任何未处理 Promise 拒绝的程序崩溃: DeprecationWarning: Unhandled promise rejections are deprecated...如果拒绝的 Promise 不是第一个出现在输入数组中的对象,则 Promise.race 解析: const promise1 = Promise.resolve("The first!")...Node.js 中的异步错误处理:回调模式 对于异步代码,Node.js 强烈依赖两个习惯用法: 回调模式 事件发射器 在 回调模式 中,异步 Node.jsAPI 接收一个函数,该函数通过 事件循环

    6.5K20

    asyncawait 到底要不要加 try catch

    } catch (error) { console.error('获取数据失败:', error); // 处理错误 } } 当 await 表达式后面的 Promise 被拒绝时...使用全局错误处理机制 在现代前端框架或Node.js应用中,通常有全局错误处理机制: // React组件错误边界 class ErrorBoundary extends React.Component...进程级错误处理 process.on('unhandledRejection', (reason, promise) => { console.error('未处理的Promise拒绝:', reason...使用函数式错误处理 可以考虑使用函数式编程的方式处理错误: // 使用工具函数处理可能抛出错误的异步函数 async function handleAsync(fn, ...args) { try...,高层函数处理错误 避免过度使用try catch:不必要的try catch会使代码变得冗长且难以维护 使用适当的错误类型:创建自定义错误类,便于区分和处理不同类型的错误 class NetworkError

    28610

    【愚公系列】2022年02月 微信小程序-应用生命周期和全局变量

    微信小程序的生命周期: 应用生命周期 页面生命周期 一、应用生命周期 1.JS配置 App({ // 生命周期回调——监听小程序初始化 onLaunch (options) { console.log...('页面不存在监听函数') }, // 未处理的 Promise 拒绝事件监听函数 onUnhandledRejection (options) { console.log('未处理的...Promise 拒绝事件监听函数') }, // 监听系统主题变化 onThemeChange(options) { console.log('监听系统主题变化') }, //开发者可以添加任意的函数或数据变量到...参数:与 wx.onPageNotFound 一致 2.6 onUnhandledRejection(Object object) 小程序有未处理的 Promise 拒绝时触发。...二、全局变量 // 其他的js文件获取全局变量 var appInstance = getApp() console.log(appInstance.globalData) // I am global

    59160

    有了承诺之后,没完成,需要处理

    当 promise 拒绝时,控件跳转到最近的拒绝处理程序。这在实践中很方便。...或者,可能站点一切正常,但响应不是有效的JSON。...“看不见的try..catch,执行程序会自动捕获错误并将其转换为被拒绝的Promise。 这不仅发生在executor函数中,也发生在其处理程序中。...在出现错误的情况下,承诺被拒绝,执行应该跳转到最近的拒绝处理程序。但是没有。所以错误被“卡住”了。没有代码来处理它。 在实践中,就像代码中的常规未处理错误一样,这意味着某些东西出现了严重的错误。...通常这种错误是不可恢复的,所以我们最好的解决方法是通知用户这个问题,并可能向服务器报告这个事件。 在非浏览器环境中,如Node。还有其他方法可以跟踪未处理的错误。

    1.9K20

    鸿蒙next版开发:分析JS Crash(进程崩溃)

    在HarmonyOS 5.0中,JavaScript Crash(JS Crash)指的是未处理的JavaScript异常导致应用意外退出的情况。...异常类型JS异常根据不同的异常场景,在Reason字段进行了分类,分为Error、TypeError、SyntaxError、RangeError等错误类型。...典型分析案例案例一:因未处理三方接口抛出的JS异常导致的JS Crash问题获取JS Crash日志核心内容:通过日志信息可以确定为Error类问题,为代码主动抛出的异常。...定位到具体代码:通过JS堆栈,能够定位到具体文件中的具体代码片段,异常抛出位置为wifiManager.on函数调用。...修改方案:通过分析wifiManager.on源码,得知该函数内存在部分场景会抛出内容为BussinessError 2501000: Operation failed.的JS异常,对于此类问题,识别当前业务异常不会导致当前程序无法运行下去

    84900

    前端异常的捕获与处理

    onOk 使用普通函数时,函数内执行语句的 this 上下文为 Antd.Modal 组件的实例,而 Antd.Modal 组件不存在 changeFilterType 这个方法。...,我们需要思考当错误发生时: 错误是否是致命的,会不会导致其它连带错误 后续的代码逻辑还能不能继续执行,用户还能不能继续操作 是不是需要将错误信息反馈给用户,提示用户如何处理该错误 是不是需要将错误上报服务端...异常 React 处理异常的方式不同。...因为 React 组件是声明性的,所以 try-catch 不是一个可靠的选项。为了弥补这一点,React 实现了所谓的错误边界。...错误边界是 React 组件,它“捕获子组件树中的任何地方的 JavaScript 错误”,同时还记录错误并显示回退用户界面。

    5.3K30

    前端面试精华指南

    核心概念 闭包:函数与其词法环境的组合。即使外部函数已执行完毕,内部函数仍可访问其变量。 典型用途:数据封装、模块模式、防抖节流、私有变量模拟。...__proto__:实例对象的内部属性,指向其构造函数的 prototype。 ES6 class 本质仍是基于原型的语法糖。 2. 高频面试题 “什么是寄生组合式继承?...__proto__ 链是否包含构造函数的 prototype。...核心概念 虚拟 DOM 是用 JS 对象描述真实 DOM 的轻量表示。当状态变化时,通过 Diff 算法 计算最小更新 patch,批量应用到真实 DOM,避免频繁重排重绘。 2....前端工程师能力图谱 层级 能力要求 语言基础 JS 核心(作用域、闭包、原型、异步、事件循环) 框架深度 React/Vue 响应式原理、组件设计、状态管理 工程能力 构建工具、性能优化、CI/CD、监控体系

    21810

    关于 JavaScript 错误处理的最完整指南(下半部)

    使用 Promise.race 来处理错误 Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝...使用 async generators 来处理错误 JavaScript中的async generators是能够生成 Promises 而不是简单值的生成器函数。...Node.js 中的异步错误处理:回调模式 对于异步代码,Node.js 主要使用这两种方式: 回调模式 event emitters 在回调模式中,异步 Node.js API 接受一个函数,该函数通过事件循环处理...在 Node.js 中所做的大部分工作都是基于事件的。...Node.js中的任何事件驱动模块(例如net)都扩展了一个名为EventEmitter的根类。 Node.js中的EventEmitter有两种基本方法:on和emit。

    2.8K20

    【JS 口袋书】第 8 章:以更细的角度来看 JS 中的 this

    这是不对的。咱们不要忘记JS不是一种面向对象的语言,而且它是宽松的、动态的,并且没有真正的类。...换句话说,函数中的this将自动指向该对象。这是JS中的第二条规则,名为隐式绑定。...当咱们将事件处理程序作为一个prop分配给React元素时,该方法将作为引用而不是函数传递,这就像在另一个回调中传递事件处理程序引用: // 丢失绑定 const handleClick = this.handleClick...全局变量 this 在严格模式下是undefined为什么咱们的函数试图更新 window.data而不是post.data?...隐式绑定表示当一个函数引用 this 并作为 JS 对象的一部分运行时,this 将指向这个“宿主”对象。但 JS 函数总是在一个对象中运行,这是任何全局函数在所谓的全局作用域中定义的情况。

    3.2K20

    📝  《React性能优化完全手册:从useMemo到并发模式》

    —— 从原理到实践,拒绝无效优化 开篇:为什么React应用会变慢?...React的虚拟DOM机制并非银弹,以下场景会引发性能问题:过度渲染:父组件状态变化触发所有子组件重渲染重型计算:复杂数据转换阻塞主线程副作用滥用:不当的useEffect使用导致连锁更新组件设计缺陷:...18的并发模式(Concurrent Mode)不是魔法,而是通过可中断渲染与优先级调度实现流畅交互:传统渲染 并发模式渲染 同步阻塞主线程 分片执行可中断 高优先级任务需排队...:未清理的副作用:useEffect中订阅事件/定时器未取消DOM引用残留:手动操作DOM后未置空引用全局状态堆积:Redux中无用缓存数据未清理// 正确做法:useEffect清理函数useEffect...行动号召:立即用npx lighthouse 的URL>生成首份性能报告在团队README中添加性能Checklist评论区留言#React优化实践 分享你的实战案例▌▍▎▏ 你的每个互动都在为技术社区蓄能

    1.1K20

    按照 PromiseA+ 手写Promise,通过promises-aplus-tests的全部872个测试用例

    ,则抛出一个TypeError为原因拒绝promise。...不是对象或函数,则用x完成promise; * 2.1 Promise的决议状态是不能变的,一旦决议了,就不能再进行决议,所以这里要先判断promise是否已经决议 */ if...从大的方面来说,then方法中主要做了 2 件事: 处理 onFulfilled 或者 onRejected 不是函数的情况; 创建并返回一个新的 promise 实例; 2.1 利用包装函数将 onFulfilled...处理onFulfilled或者onRejected不是函数的情况 // Promises/A+:2.2.1 onFulfilled 和 onRejected都是可选的,如果他们不是函数,就会被忽略。...如果回调函数执行出错,将以抛出的错误,拒绝新的promise; // 2. 否则,新返回的promise会沿用旧promise的决议值进行决议。

    1.2K30

    前端 JS 异常那些事

    编译型语言对于这种很常见的,但是解析型的 js 也是会有编译型异常。...比较常见的如TypeError: Cannot read properties of undefined这样的读取了undefined的属性。...window.onerror则无法捕获静态资源的加载错误 React 中的异常 白屏异常 React 处理阶段的同步代码报错,整个组件树挂了导致卸载掉,页面展示白屏 生命周期函数报错 render...同理,因为事件回调函数的处理不是在 React 处理阶段(初始化或者事件处理setState驱动 react 进行下次渲染的),所以事件处理函数中的报错同样不会触发白屏 Error Boundary 既然白屏问题如此严重...至于为何 Preact 能先于 React 支持功能,原因在于对于 Preact 的实现来说,它的函数组件和 class 组件都是实例化成一样的实例,函数组件的 hook 中直接定义componentDidCatch

    1.7K10
    领券