js webStorage相关问题?

如下是整个代码,可以运行。我的问题是:在函数cookieToList中,如果把localStorage.getItem("cart") && (a = eval(localStorage.getItem("cart")));这一行注释,而使用下边的a = eval(localStorage.getItem("cart"));就会报错。
经过控制台输出查看,上边的语句得到的a为[],而下边的语句得到的a为null,为什么会不同呢。localStorage.getItem("cart")这个语句按说没起什么作用,又没要对变量赋值,都是执行的 && 后边的语句。

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="jquery-1.7.1.min.js"></script>
<script type="text/javascript">
$(function(){
    var good_list = cookieToList();

    $('button').on('click',addCart);

    function addCart() {
        good_list.push({
            gid: 1,
            buyTimes: 1
        });
        localStorage.setItem("cart", JSON.stringify(good_list));
        cookieToList();
    }

    function cookieToList() {
        var a = [];

        localStorage.getItem("cart") && (a = eval(localStorage.getItem("cart")));//a == []
        //a = eval(localStorage.getItem("cart"));//a == null

        return a;
    }
});
</script>
</head>
<body>
<button type="button">click</button>
</body>
</html>

因为初始化时 localStorage.getItem("cart") 为null,eval后还是为null,那么a的值就是null,会导致addCart出错,因为null没有push方法,这个是数组的。

localStorage.getItem("cart") && (a = eval(localStorage.getItem("cart")));
这是判断cart项有值才会给a赋值,否则a就是默认值[],不会导致代码出错