Javascript 我可以转换值为';未定义';到实际未定义?

Javascript 我可以转换值为';未定义';到实际未定义?,javascript,Javascript,当我从前端发出GET请求时,我会对url应用两个查询参数,如下所示: let response = await axios.get('/products?searchQuery=' + this.searchQuery + '&categoryId=' + this.categoryId + '&model=' + this.model + '&page=' + this.currentPage) 问题是,当我console.log(typeof searchQuery

当我从前端发出GET请求时,我会对url应用两个查询参数,如下所示:

let response = await axios.get('/products?searchQuery=' + this.searchQuery + '&categoryId=' + this.categoryId + '&model=' + this.model + '&page=' + this.currentPage)
问题是,当我
console.log(typeof searchQuery)
位于后端时,它表示searchQuery是一个
string
类型,其值未定义,而不是
未定义的类型。因此,此if语句失败:

if (searchQuery !== undefined) {

}

所以我想知道是否有可能将值为“undefined”的字符串转换为实际的未定义数据类型。

您在那里进行字符串连接,这就是为什么
console.log(typeof searchQuery)
logs
string
。当然,在后端有一些特定于框架的选项来处理这个问题,但最简单的解决方案是检查
searchQuery===“undefined”

也许可以检查前端已经存在的
searchQuery
,而不将其包含在查询中?

不要这样做。真的<不要。做这个。你从这个案子中学不到什么吗

如果前端未定义参数,请在请求中完全忽略该参数

const usp = new URLSearchParams;
const setIfSet = (usp, key, value) => {
    if (value == void 0) return;
    usp.set(key, value);
};
setIfSet(usp, 'searchQuery', this.searchQuery);
setIfSet(usp, 'categoryId', this.categoryId);
setIfSet(usp, 'model', this.model);
setIfSet(usp, 'page', this.currentPage);

const response = await axios.get('/products?' + usp)
通过这种方式,您将在后端实际上未定义它,并且您将不必执行这种愚蠢的变通方法


如果Undefined先生访问过您的页面,他将非常感激。

这是可能的,但您为什么不检查字符串变量呢?我是说,
searchQuery!='未定义“
?@FZs”,因为如果我在没有查询参数的情况下发出GET请求,如let response=wait axios.GET(“/products?page=”+this.currentPage),则searchQuery在后端将是未定义的类型。首先修复无意中将实际未定义值转换为字符串的问题,而不是事后处理。