如果没有值,则将变量设置为null

时间:2015-06-26 14:27:18

标签: javascript

如果值存在则执行填充,否则不执行:

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在这里是否相关?如果它存在的东西留下它定义它吗?或者我走错了路?

2 个答案:

答案 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中,nullobject,因此此表示法与获取对象属性的值相同。由于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;
    }
}