我遇到了这段代码:
var value = this.newTodo && this.newTodo.trim();
在此示例中:http://codepen.io/anon/pen/rONEMQ?editors=101
我不明白 AND (&&) 运算符想要完成什么。
根据我的理解,&&运算符是将多个属性分配给一个值,但这里似乎并非如此。
我的代码示例,我没有看到任何区别,因为当我使用这个时:
var value = this.newTodo && this.newTodo.trim();
而不是这个:
var value = this.newTodo;
或者只是这样:
var value = this.newTodo.trim();
任何人都可以解释一下上面和示例中所述的初始行与 && 的作用吗?
var value = this.newTodo && this.newTodo.trim();
如果 this.newTodo 不是“假”值之一,即
""
、0
、false
、undefined
、null
、[]
(我确信我忘记了一些),然后 value = this.newTodo.trim()
,否则 value = this.newTodo
(可能是 ""
、0
、false
、undefined
、null
、[]
等)
我的代码示例,我没有看到任何区别,因为当我使用这个时:
var value = this.newTodo && this.newTodo.trim();
而不是这个:
var 值 = this.newTodo;
如果 this.newTodo 是
"Hello World"
...你是对的,没有区别
如果 this.newTodo id
" Hello World "
... 值将是 "Hello World"
... 即 trimmed 的前导和尾随空格
因为 Javascript 是一种松散类型语言,所以布尔运算符 && 和 ||可以采用任何类型作为操作数。
&& 运算符从左到右进行运算,返回第一个“假”操作数。如果没有找到假操作数,则返回最后一个操作数
||运算符从左到右进行运算,返回第一个“真实”操作数。如果没有找到真实的操作数,则返回最后一个操作数。
假值有 ""、''、0、false、未定义、null、Nan
真实值是所有其他值。有趣的是,空对象 {} 和空数组 [] 都是 true。
示例:
this.newTodo =“你好世界” 让 value = this.newTodo && this.newTodo.trim()
首先测试 this.newTodo 是真还是假。这是真的,所以我们转向下一个操作数:this.newTodo.trim()。 this.newTodo.trim() 也是 true,所以我们返回最新的操作数,即 this.newTodo.trim()
this.newTodo =“你好世界” 让 value = this.newTodo && this.newTodo.trim()
this.newTodo 是真的,所以我们转向第二个操作数。 this.newTodo.trim() 也是真的。由于没有更多的操作数,并且我们还没有找到错误的操作数,因此我们返回 this.newTodo.trim(),即“Hello World”。
如果 this.newTodo 是一个假值,例如 null 或 undefined 或“”,那么我们永远不会移动到第二个操作数,而只是返回第一个操作数。
我认为表达式
let value = this.newTodo && this.newTodo.trim()
的要点是避免在 this.newTodo 为假时调用修剪函数。