TypeError: (void 0) is not a function 、void 0 、import.meta.globEager(uniapp、vite)

 import.meta.globEager 问题(报错 void 0)

下面是小程序的报错:

点击报错的 index.js 看到资源:var files = (void 0)("./*.js");

这里只需要知道 void 0 转变为 undefined 即可,原因是 引入一些文件,导致了读取错误,这里用 : ./*.js  去我的全局代码查找,发现:

去查看了 vite 的文档,发现:

vite 文档链接:从 v2 迁移 | Vite 官方中文文档

./*.js是一个通配符模式,它会匹配当前目录下所有以 .js 结尾的文件。import.meta.globEager('./*.js')返回一个对象,其中键是匹配到的文件路径,值是对应模块的导出。

例如以下 文件

const files = import.meta.globEager('./*.js'); //已弃用
//const files = import.meta.glob('./*.js', { eager: true })

let api = {};
Object.keys(files).forEach((key) => {
  api = {
    ...api,
    [key.replace(/(.*\/)*([^.]+).*/gi, '$2')]: files[key].default,
  };
});

export default api;

以上的代码的作用相当于:(以下代码是一个个引入)

import app from './app';
import chat from './chat';
import third from './third';
let api = {
  app,
  chat,
  third
};

export default api;

const files = import.meta.globEager('./*.js'); 弃用了,直接改为: const files = import.meta.glob('./*.js', { eager: true }) 即可

 了解 void 0

(void 0) 是 JavaScript 中一个常见的表达式,用于产生 undefined 值。它的主要用途是确保返回的值是 undefined,而不会被意外的全局变量 undefined 的值所影响。以下是一些详细解释和用例:

详细解释

  1. 生成 undefined: void 运算符在 JavaScript 中接受一个表达式并返回 undefined,不论表达式的值是什么。因此,void 0 将 0 作为表达式计算,但返回 undefined。
  2. 防止意外覆盖: 在早期的 JavaScript 中,全局变量 undefined 可以被重新定义或覆盖。使用 (void 0) 确保返回的始终是 undefined,而不会被覆盖。
  3. 代码压缩和混淆: 在某些压缩和混淆工具中,使用 (void 0) 可以更有效地减少代码体积,因为它比直接使用 undefined 短。

用例

以下是一些常见的用例和场景:

1. 确保返回 undefined
var value = (void 0);
console.log(value);  // 输出: undefined
2. 作为默认值

在某些情况下,使用 (void 0) 可以作为函数参数的默认值:

function example(param) {
  param = param !== undefined ? param : (void 0);
  console.log(param);
}

example();  // 输出: undefined
example(42);  // 输出: 42
3. 避免 undefined 变量被重写

假设你有一个旧的代码库或第三方库,undefined 可能被重写,使用 (void 0) 可以避免这种情况:

undefined = 42;  // 错误地重写了 undefined
var value = (void 0);
console.log(value);  // 输出: undefined

总结

  • void 0 返回 undefined: 使用 void 运算符对 0 进行操作,结果总是 undefined。
  • 避免被重写: 防止全局 undefined 变量被重写。
  • 代码压缩: 在某些情况下,比 undefined 更短,有助于代码压缩和混淆。
  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值