JavaScript 函数参数默认值怎么用,哪些情况不会生效
JavaScript 从 ES6 开始支持函数参数默认值,可以直接处理“未传参”或传入 undefined 的情况。默认值既能写字面量,也能写表达式,还能和解构赋值一起使用;但 null、0、false、空字符串这类值不会触发默认值,这也是最常见的误区。
JavaScript 从 ES6 开始支持函数参数默认值,可以直接处理“未传参”或传入 undefined 的情况。默认值既能写字面量,也能写表达式,还能和解构赋值一起使用;但 null、0、false、空字符串这类值不会触发默认值,这也是最常见的误区。

动态 Cookie 防护的关键,不在于“设置一个 Cookie”,而在于要求客户端在真实浏览器环境里现场算出可校验的凭证。本文按生成、校验、失效原因与表单防刷增强四个环节,梳理这类 JavaScript 反爬机制的工作方式与适用边界。

`Object.preventExtensions()` 只会阻止对象新增“自有属性”,不会封住原型链。实例仍可修改已有字段、删除属性,也能继续从原型继承新方法。理解它与 `prototype`、`__proto__`、`seal`、`freeze` 的边界,才能避免把“不可扩展”误当成“完全不可改”。 很多开发者会把 Object.preventExtensions() 误解成“对象彻底不能再动”,结果在看到原型还能继续加方法时感到困惑。

在微信小程序里接 WebSocket,关键不在语法,而在于它和浏览器原生实现完全不是一套生命周期。本文按连接创建、事件监听、收发控制、重连心跳和主动关闭五个环节梳理规则,帮你判断哪些坑会直接导致断连、报错或消息丢失。

Selection 和 Range 是浏览器里处理文本选区的两把基础工具。前者表示“用户当前选中了什么”,后者负责“代码要操作哪一段”。把两者的职责分清后,就能更稳地实现读取选中文本、设置高亮、移动光标,以及删除、包裹、插入内容等编辑能力。

在可排序、可筛选的表格里,把事件统一委托到 或 ,能减少逐列绑定带来的开销,也更适合动态列场景。关键不只是拦截事件,还要借助 event.target.closest() 准确识别交互来源,并把排序、筛选和状态同步拆分清楚。

在 Masonry 瀑布流里,图片位置会随加载和重排不断变化,给每张图单独绑定点击事件既繁琐也不稳。更合适的做法是把 click 统一交给父容器处理,再用 event.target.closest() 找到真正被点中的图片,同时兼容懒加载和后续动态插入。

在网页里用 Set 维护“支持全屏的元素集合”,重点不在扫描所有节点,而在筛出真正可调用 requestFullscreen 的候选元素,并配合 fullscreenchange 持续补齐实际进入过全屏的对象。文章给出一套轻量写法,同时说明兼容性、权限限制和常见误判。

在 Ubuntu 上排查 Node.js 错误,关键不只是“看日志”,而是按系统、服务、应用和代码四层逐步收窄范围。本文整理了常用命令、PM2 与 Winston 的接入方式,以及端口占用、依赖缺失等典型故障的排查路径。 Node.js 服务在 Ubuntu 上出故障时,最怕的不是报错本身,而是日志分散、定位路径混乱,结果越查越慢。

JavaScript 垃圾回收不会因为闭包里某个大变量“看起来没用”就自动释放它。判断标准只有可达性:只要闭包函数还活着,它背后的词法环境就可能继续持有大对象。本文用示例、优化写法和 DevTools 排查方法,说明这类内存占用该怎么识别与处理。

`Object.getOwnPropertyNames()` 用来拿到对象自身的全部字符串属性名,既包含可枚举属性,也包含不可枚举属性,但不会带上原型链属性和 `Symbol` 属性。本文用对比示例说明它与 `Object.keys()` 的差异、典型用途,以及使用时最容易忽略的边界。

在 TypeScript 里约束异步代码,关键不只是“能跑”,而是让 Promise 最终 resolve 的值、await 解包后的结果,以及错误分支都被类型系统准确描述。本文从 async 返回声明、await 推导、错误处理到 Promise 构造和 Promise.all 的类型对齐,梳理一套更稳妥的写法。
