欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js 实用技巧 短路求值

程序员文章站 2022-03-22 12:08:41
&&运算符 如果操作有false 则返回false 例如 0&&1 // 返回0 true&&false //返回false 0&&null //返回0 如果所有操作数的值都是 true,将返回最后一个表达式的值。例如 let one = 1, two = 2, three = 3; console ......

&&运算符  如果操作有false  则返回false  例如 

0&&1  // 返回0   

true&&false  //返回false

0&&null //返回0

如果所有操作数的值都是 true,将返回最后一个表达式的值。例如

let one = 1, two = 2, three = 3;

console.log(one && two && three); // result: 3

 

| | 运算符 操作有true 就返回true  例如

true | | false  //返回true 

false | | true  //返回true  证明不是返回第一个表达式的值哦

如果所有操作数的值都是 false,将返回最后一个表达式的值。例如

0||false   //返回 false

false||0  //返回  0

 

看到这里  可能觉得太简单了吧 谁不会。。。 不过可能工作中确实不知道怎么用吧  下面说几个示例

1.假设我们想要返回一个变量的 length,但又不知道变量的类型 应该怎么搞呢?

我们可以使用 if/else 来检查 foo 是否是一个可接受的类型,但这样会让代码变得很长。这个时候可以使用短路求值:

return (foo | | [ ] ).length  

上述代码  如果有length  就返回长度  否则  就返回0 

let arr;

(arr | | [ ]).length

//返回 0
arr = [1,2,3,4]

(4) [1, 2, 3, 4]

( arr | | [ ] ).length

//返回4

 

2.你是否曾经在访问嵌套对象属性时遇到过问题?你可能不知道对象或某个子属性是否存在,所以经常会碰到让你头疼的错误。

假设我们想要访问 this.state 中的一个叫作 data 的属性,但 data 却是 undefined 的。在某些情况下调用 this.state.data 会导致 app 无法运行。为了解决这个问题,我们可以使用条件语句:

if (this.state.data){

  return this.state.data;

}else {

  return 'fetching data';

}

如果使用短路求值  是不是更加简洁一点呢  

return ( this.state.data | |  'fetching data' )