为何对undefined赋值不会抛出Invalid left-hand assignment错误?
为什么给
undefined赋值不会抛出“Invalid left-hand assignment”错误? 你遇到的这个情况是Node.js REPL(交互终端)的特殊行为,和常规JS执行环境不一样:
- 在浏览器全局作用域或者Node.js的普通脚本文件里,
undefined是全局对象(globalThis)的不可写、不可配置属性,严格模式下强行赋值会直接报错,非严格模式也会静默失败,根本改不了它的值。 - 但Node.js的REPL每执行一行代码,都会被自动包裹在一个类似函数的包装器里,这里的
undefined是作为函数的形参存在的——形参本质是局部变量,没有被标记为只读,所以你可以随便给它赋值,自然不会触发“左侧赋值无效”的错误。
简单来说,REPL里的undefined不是那个全局的只读属性,而是个普通局部变量。你要是写个.js文件,把undefined = 'asdf'放进去用Node运行,严格模式下照样会报错,和浏览器表现一致。
内容的提问来源于stack exchange,提问作者BrDaHa
相关产品推荐
相关产品推荐

