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

Javascript 如果没有值,则将变量设置为null,javascript,Javascript,如果该值存在,则执行填充,否则不执行: var cookarr = document.cookie.match(/(^| )abc_contact\=([^;]*)(;|$)/); var iscontact = cookarr[2]; var outcome = 0; if(iscontact) { outcome = true; } else { outcome = false;

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

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:无法读取null的属性“2”

如果没有cookie,我如何告诉Javascript将iscontact设置为null,而不是抛出错误


我记得以前看到过一些JS,其中设置了一个变量,如
var apples='bla'| |'something'与此相关吗?比如说,如果它存在,留下它,或者定义它?还是我走错了路?

你可以先检查一下饼干。检查它是否未定义,是否有足够的匹配项

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;
    }
}
尝试:

| |
可以用作空合并运算符的JavaScript版本。它会说,“如果左边的值是真实的,就使用它。否则,就使用右边的值”。但在这种情况下,您甚至不需要
| |

以下方法可以很好地工作:

var iscontact = cookarr && cookarr[2]
如果数组本身存在,则上面的
&&
检查是获取数组元素的快捷方式。
&&
链中的值(这里只有两个)将按顺序计算。如果遇到一个计算结果为falsy的值,它将停止并返回该值。否则,它将返回链中的最后一个值

在您的代码中,如果
cookarr
为null(falsy),则链结束,并且
iscontact
设置为null。如果
cookarr
不为null并返回真实值,则链将继续到链中的下一个(也是最后一个)项,并将
iscontact
设置为
cookarr[2]

要回答您的问题,“为什么我不能使用iscontact=cookarr[2]| | null”:


当JavaScript引擎尝试计算
cookarr[2]
时(当
cookarr
为null时),它尝试执行
null[2]
。在JavaScript中,
null
是一个
对象
,因此此表示法与获取对象属性的值相同。由于
2
不是
null
的属性,它会抛出错误。

Ha,我在用最后一句话编辑我的问题后看到了这一点!那么,在英语中,它在做什么?握住我的手,再次感谢。那么为什么我需要cookarr和cookarr[2]?我可以让var iscontact=cookarr[2]| | null;实际上,您根本不需要
|
,让我再次编辑。
var iscontact = cookarr && cookarr[2]