Javascript 我可以转换值为';未定义';到实际未定义?
当我从前端发出GET请求时,我会对url应用两个查询参数,如下所示: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
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)
logsstring
。当然,在后端有一些特定于框架的选项来处理这个问题,但最简单的解决方案是检查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在后端将是未定义的类型。首先修复无意中将实际未定义值转换为字符串的问题,而不是事后处理。