JS的异常报错类型 Error 所有错误对象的基类。自己也可以直接 throw new Error('msg') 产生自定义错误。 SyntaxError 代码在解析阶段不符合语法规则。 例:eval('1 +') 抛出 SyntaxError: Unexpected token ')' ReferenceError 访问了不存在的变量 / 词法绑定。 例:console.log(foo) 而 foo 未声明。 TypeError 值的类型不符合预期或对象内部方法/属性不可调用。 例:`null.f() 或 Object...
一句话阐述:this 的指向,是在调用函数时根据执行上下文所动态确定的,具体根据动态绑定、全局环境、箭头函数等机制细分判断。 this 动态绑定 this的动态绑定指 this 的值是在函数被调用时才确定。通过对象调用时,this 指向最后调用它的对象叫隐式绑定,同时,通过通过 call()、apply() 或 bind() 强制指定 this,这叫动态绑定。 // 1. Function.prototype.call() /** 这个函数几乎与 apply() 相同,只是函数的参数以列表的形式逐个传递给 call(), ...
原型链 Person.prototype === person.proto_ //true Person.prototype.constructor === Person //true person.constructor === Person //true JavaScript的原型链是实现对象继承的核心机制,简单来说,每一个对象都有一个原型,通过 \\__proto__ 属性指向该...
Fetch 与 XHR、Axios 的核心区别 总结:Fetch 是浏览器原生 Promise API,轻量但功能最少;XHR 历史包袱大,已不推荐新项目;Axios 在浏览器和 Node 都能用,内置拦截器、超时、取消、自动 JSON 处理 语法上: Fetch、Axios 基于 Promise API, 而 XHR 基于事件驱动 行为差异: Fetch 默认 同源请求才带 cookie, 而且 XHR 和 Axios 总是携带 cookie Fetch 和 XHR 需要手动序列化反序列化,而 Axios 能自动处理 Fe...
数组常用方法 let array = Array.from({length:10}, (_, i) => i + 1) // array.push(item) 从尾端添加元素 // 返回: 新增的元素 // 特性: 改变原数组 console.log(array.push(11)) console.log(array) // array.unshift(item) 从首端添加元素 // 返回: 新增的元素 // 特性: 改变原数组 console.log(array.unshift(0)) console.log(array) //array.po...
在 JavaScript 里,「属性访达性(property reachability)」可以用多种运算符/关键字来探测,但它们各自探测的作用并不一样——换句话说,它们回答的不是同一个问题。 值的探测 只检测值是否为 null | undefined: 默认值回退: obj?.[key] ?? def 仅当结果是 null 或 undefined 才回退到 def。 宽松判断: obj?.[key] == null 一次性匹配 null 或 undefined,因为 null == undefined 为 true **一次性监测所有f...
所谓类数组对象,是指拥有 length 属性和若干索引属性的对象。从读写、获取长度、遍历这三个方面来看,与数组无异,但没有办法主动调用数组方法。 数组实例从 Array.prototype 继承了 push、pop、slice 等方法,而类数组对象的原型链里根本没有这一环,所以即使结构长得像数组,也调不动那些方法。 var array = ['name', 'age', 'sex']; var arrayLike = { 0: 'name', 1: 'age', 2: 'sex', length: 3 } 类数组对象中...
概念 闭包指 函数 + 函数声明时所在的作用域内、仍被该函数引用着的自由变量,即使创建函数的上下文已经销毁,函数和变量仍然存在。 var scope = "global scope"; function checkscope(){ //checkscopeContext.AO var scope = "local scope"; function f(){ return scope; } return f; } var foo = checkscope(); foo(); 当 checksco...
为什么会出现前端工程化? 前端工程化的出现,究其根本,是前端项目复杂度的提升与开发环境与生产环境不一致的矛盾。 以往的前端项目,只需要编写少许的HTML,CSS,JS文件,随着应用的发展,项目的复杂度在迅速提升,一些古早的问题也开始浮现: 全局变量污染、依赖关系混乱、代码冗余造成了生产环境性能低下。为此,前端工程化主要分三个大方向: 工程化、模块化、组件化。 组件化解决HTML、CSS、JS复用问题,减少代码冗余 模块化解决依赖关系混乱问题和全局变量污染 工程化解决开发环境与生产环境不一致问题,在开发环境,我们要求代码更加规范更加模...
sessionStorage 按照顶级浏览上下文(一个Tab) + 同源 维持一个独立的存储区域,该存储区域在页面会话期间可用。 仅为会话存储数据,这意味着数据将一直存储到浏览器(或选项卡)关闭,即只要浏览器处于打开状态,包括页面重新加载和恢复。 localStorage 只按照 同源 维持一个独立的存储区域,该存储区域永久可用。 存储的数据没有过期日期,只能通过 JavaScript、清除浏览器缓存或本地存储的数据来清除。 存储限额是两者之间的最大值。 相同特性: 数据永远不会主动传输到服务器。 `sessi...