//state的数据是用axios请求的
goodsList(state) {
    //state.searchList.goodList如果服务器数据回来了,是一个数组
    //假如网络不给力|没有网state.searchList.goodList应该返回的是undefined
    //计算新的属性的属性值至少给人家来一个数组
    return state.searchList.goodsList || [];
  },

在vue中使用vuex开发中经常可以见到这样的代码,
return state.searchList.goodsList || [];
这是为了防止有组件使用v-for遍历这个数组时,而数组的值还没请求到,出现报错的情况。
因为如果不加后边的空数组,当数组的值没有请求到时,state.searchList.goodsList是一个undefined,那么使用v-for遍历一个undefined则会报错。加上 [] 后则会返回一个空数组而避免报错。

或运算

或运算的规则是:一真则真,全假为假
但是如果我们将或运算用与函数的返回值计算时,函数返回的会是或运算中的哪一个元素呢。

//一真一假
function fun() {
  return 1 || 0;
}
console.log(fun()) // 1

function fun1() {
  return 0 || 1;
}
console.log(fun1()) // 1

 //两个都为真
 function fun2() {
  return 1 || 2;
}
console.log(fun2()) // 1

function fun3() {
  return 2 || 1;
}
console.log(fun3()) // 2

//两个都为假
function fun4() {
  return null || false;
}
console.log(fun4()) // false

function fun5() {
  return false || null;
}
console.log(fun5()) // null

可以看到,当返回值为一真一假时,总是返回为真的元素
返回值为两真时,总是返回或运算前的元素
返回值为两假时,总是返回或运算后的元素

经过思考,原因如下
或运算符的判定规则是,当遇到一个值为真的元素时,不管后边的元素是真是假,该表达式总是为真,所以会直接将这个为真的元素返回。
而如果当前元素为假,会继续往下判断,如果遇到值为真的元素就返回这个元素,如果没有值为真的元素就返回最后一个元素

与运算

与运算的规则:一假则假,全真才真

//一真一假
function fun() {
  return 1 && 0;
}
console.log(fun()) // 0

function fun1() {
  return 0 && 1;
}
console.log(fun1()) // 0

 //两个都为真
 function fun2() {
  return 1 && 2;
}
console.log(fun2()) // 2

function fun3() {
  return 2 && 1;
}
console.log(fun3()) // 1

//两个都为假
function fun4() {
  return null && false;
}
console.log(fun4()) // null

function fun5() {
  return false && null;
}
console.log(fun5()) // false

道理同或运算一样,只不过与运算是碰到值为假的元素直接返回,遇到值为真的元素就会继续向下判断,如果前边的都为真,就返回最后一个元素。

Logo

前往低代码交流专区

更多推荐