如果值存在则执行填充,否则不执行:
var cookarr = document.cookie.match(/(^| )abc_contact\=([^;]*)(;|$)/);
var iscontact = cookarr[2];
var outcome = 0;
if(iscontact) {
outcome = true;
} else {
outcome = false;
}
如果有一个名为abc_contact的cookie,则返回的cookarr变量索引为2将是该cookie的值。
在cookie不存在的情况下,cookarr将为null。
永远不会设置变量结果,错误似乎打破了流程。未被捕捉TypeError: Cannot read property '2' of null
如果没有cookie,我如何告诉Javascript将iscontact设置为null,而不是抛出错误?
我记得在过去看到一些变量被设置为var apples = 'bla' || 'something else';
的JS在这里是否相关?如果它存在的东西留下它定义它吗?或者我走错了路?
答案 0 :(得分:2)
尝试:
var iscontact = cookarr && cookarr[2] || null;
||
可用作JavaScript合并运算符的JavaScript版本。它会说," 如果左边的值是真的,请使用它。否则,请使用右侧的值"。但在这种情况下,您甚至不需要||
。
以下工作正常:
var iscontact = cookarr && cookarr[2]
如果数组本身存在,上面的&&
检查是获取数组元素的快捷方式。将按顺序评估&&
链中的值(此处只有两个)。如果它遇到一个评估为假的值,它将停止并返回它。否则,它将返回链中的最后一个值。
在您的代码中,如果cookarr
为null(falsy),则链结束,iscontact
设置为null。如果cookarr
不为null且返回真值,则链会继续到链中的下一个(也就是最后一个)项,并将iscontact
设置为cookarr[2]
。
要回答你的问题," 为什么我不能使用iscontact = cookarr [2] ||空":
当JavaScript引擎尝试评估cookarr[2]
时(cookarr
为空时),它会尝试null[2]
。在JavaScript中,null
是object
,因此此表示法与获取对象属性的值相同。由于2
不是null
的属性,因此会抛出错误。
答案 1 :(得分:0)
你可以先检查一下cookie。检查它是否未定义且它有足够的匹配
var cookarr = document.cookie.match(/(^| )abc_contact\=([^;]*)(;|$)/);
if (cookarr && cookarr.length > 1){
var iscontact = cookarr[2];
var outcome = 0;
if(iscontact) {
outcome = true;
} else {
outcome = false;
}
}