You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中直接写入undefined原始值而非引用全局属性?

关于直接使用JavaScript原始undefined值的问题

首先明确核心结论:可以直接使用原始的undefined值,无需依赖全局undefined属性。下面是具体的实现方式和相关细节:

直接获取原始undefined的几种方式

  • 未赋值变量的默认值:声明变量但不初始化时,变量会被自动赋予原始undefined值,这个值和全局undefined属性无关。比如:
    let unassigned;
    console.log(unassigned === void 0); // true,说明是同一个原始值
    
  • void操作符:void操作符的作用是对任意表达式求值后,直接返回原始undefined值,完全不依赖全局环境的undefined属性。这也是业界常用的规避全局undefined被篡改风险的写法:
    const rawUndefined = void 0;
    // 即使全局undefined被篡改(旧环境非严格模式下可能发生),rawUndefined依然是原始值
    
  • 无返回值函数的返回结果:没有显式return语句的函数,调用后会返回原始undefined:
    function noReturn() {}
    console.log(noReturn() === void 0); // true
    
  • 解构赋值中的缺失项:当解构数组/对象时,对应位置没有值的变量会被赋予原始undefined:
    const [missingArrItem] = [];
    const { missingObjProp } = {};
    console.log(missingArrItem === missingObjProp); // true,都是原始undefined
    

关于全局undefined属性的补充说明

  • 你实验中发现的delete undefined行为差异,本质是因为全局undefined是一个不可写、不可配置的属性:
    • 非严格模式下,delete undefined返回false,因为该属性无法被删除;如果写成delete window.undefined(浏览器环境),同样会返回false。
    • 严格模式下,delete操作符不允许直接删除标识符(比如undefined这种变量名),因此会抛出SyntaxError。
  • 现在的ES规范中,全局undefined属性已经被锁定,无法被重新赋值(严格模式下赋值会报错,非严格模式下赋值无效),但即使在旧环境中它被篡改,你依然可以通过上面的方式获取原始的undefined值。

总结

你完全可以像使用true、false那样直接使用原始undefined值,void 0是最直接且安全的写法,不需要依赖全局的undefined属性引用。

内容的提问来源于stack exchange,提问作者mishar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:22:41