如何在javascript中检查空变量
我有如下JSON文件:如何在javascript中检查空变量,javascript,html,json,Javascript,Html,Json,我有如下JSON文件: [{"url":null,"id":null},{"url":"bHo2M0V6ZzdOK0JPUFFSRG16ZHErRUJSWTRCQmxIY2lTL0I3Z2xkeVpnZHpRODRaaHZhOFR6S3VLZFpSaXpsWkVvY25jNDZIZGdJbzl3UE9MZGtmSXBsbHVvLzZuOXB5WXBYWS9VTk03dXM9","id":"
[{"url":null,"id":null},{"url":"bHo2M0V6ZzdOK0JPUFFSRG16ZHErRUJSWTRCQmxIY2lTL0I3Z2xkeVpnZHpRODRaaHZhOFR6S3VLZFpSaXpsWkVvY25jNDZIZGdJbzl3UE9MZGtmSXBsbHVvLzZuOXB5WXBYWS9VTk03dXM9","id":"7c1335b69b2b4a037b3474da1fab2bbe"}]
现在我使用javascript
解析这个JSON文件并从中提取值。其代码为:
<script>
<!-- This functions matches query string from URL-->
function getQuery(query) {
var pReg = new RegExp(query + "\\=([^\\?&]+)", "i");
if (!pReg.test(window.location.href)) {
return '';
}
var pRes = pReg.exec(window['location']['href']);
return decodeURIComponent(pRes[1]);
}
<!-- This function parse JSON -->
function parseJSON() {
fetch(`cache.json`)
.then(res => res.json())
.then(resJSON => sendData(resJSON))
.catch(console.error);
<!-- Now this function here, grabs "query string" from "url" and passes it in below function. After that it "searches" that "URL" in "parsed JSON" file above and returns the "id" associated with it. -->
var url;
url = getQuery('url')
function sendData(jsonObj){
for(var i=0;i<jsonObj.length;i++){
if(jsonObj[i].url == url){
var id = jsonObj[i].id;
}
}
}
但它在传递
URL
作为querystring
时不会记录任何内容,该字符串确实存在于JSON文件中。虽然当id
与URL
相关联时,它会完美地记录。所以我猜代码没有错。如果他们有问题,请指出。您的第一个答案应该有效,而且在使用for循环时最好使用let而不是var。尝试在for循环中记录json对象。
像下面这样试过,似乎有效
var jsonObj = [{"url":"abc","id":null},{"url":"abc","id":"7c1335b69b2b4a037b3474da1fab2bbe"}];
var url = "abc"
console.log(jsonObj.length);
for (let i = 0; i < jsonObj.length; i++) {
let temp = jsonObj[i];
console.log(temp);
if (temp.url === url) {
let id = jsonObj[i].id;
if(!id){
console.log("not exists");
} else {
console.log("exists");
}
}
}
var jsonObj=[{“url”:“abc”,“id”:null},{“url”:“abc”,“id”:“7c135b69b2b4a037b3474da1fab2bbe”}];
var url=“abc”
log(jsonObj.length);
for(设i=0;i
var jsonObj=[{“url”:“abc”,“id”:null},{“url”:“BHO2M0V6ZZDOK0JPUFFSRG16ZHERRUJSWTRCQMXIY2LTL0I3Z2XKEVPNZHPRODRAAHZHOFR6VLZFPSAXPSWKVY25JNDZGDJBZL3UE9MZGTMSXBVLZUOXB5WXBYWS9VTK03DXM9”,“id”:“7C1335B69B2B437B3474DA12BBE”];
var url=“BHO2M0V6ZZDOK0JPUFFSRG16ZHERRUJSWTRCQMXIY2LTL0I3Z2XKEVPNZHPRODRAAHZHOFR6S3VLZFPSAXPSWKVY25JNDZIGDGDJBZL3UE9MZGTMSXBSBVLZUOXB5WXBYWS9VTK03DXM9”;
for(设i=0;i }
是否要输出“空”id?然后检查(id==null)@mourino,而不仅仅是null id
。任何URL
当被传递但不在JSON文件中时,它应该记录它
,但它没有这样做。它遵循以下逻辑:如果传递的url在JSON
中不存在,那么它就不会有任何id
,这相当于null
。但是当传递(id==null){}
时,它不会记录日志。首先检查是否(url=='')…因为您是通过getQuery()函数进行检查的,如果url在json文件中不存在,它会返回''。@Mouri您能解释一下您想说什么吗。变量url
将始终存在。所以检查url
没有任何意义,我说的是var url=getQuery(url)。。。。您应该检查此url变量。如果该url在json文件中不存在,不是吗?你能更详细地解释一下吗。我更新了答案,它对我有效。它有效是因为你在两个实例中都将url
作为abc
。没关系,不确定什么不起作用检查下面的代码。这不会记录:在w3school console.log中,我只是托管了他们的代码,以便共享。您是否运行了我包含的代码段?这不是你期望的产量吗?让我们来看看。
var jsonObj = [{"url":"abc","id":null},{"url":"abc","id":"7c1335b69b2b4a037b3474da1fab2bbe"}];
var url = "abc"
console.log(jsonObj.length);
for (let i = 0; i < jsonObj.length; i++) {
let temp = jsonObj[i];
console.log(temp);
if (temp.url === url) {
let id = jsonObj[i].id;
if(!id){
console.log("not exists");
} else {
console.log("exists");
}
}
}