【问题标题】:What does expression && expression syntax mean? [duplicate]表达式 && 表达式语法是什么意思? [复制]
【发布时间】:2015-06-21 23:06:05
【问题描述】:

parent && (this.parent.next = this); 这一行是什么意思? 它看起来就像它坐在那里,什么都不做,而不是 if 语句或承诺或任何东西。这种编码风格有名字吗?

    var Particle = function(i, parent)
{
    this.next = null;
    this.parent = parent;
    parent && (this.parent.next = this);
    this.img = new Image();
    this.img.src = "http://www.dhteumeuleu.com/images/cloud_01.gif";
    this.speed = speed / this.radius;
}

它在我正在查看的这个动画文件中的多个位置。这是另一个例子..(!touch && document.setCapture) && document.setCapture();

this.down = function(e, touch)
{
    e.preventDefault();
    var pointer = touch ? e.touches[0] : e;
    (!touch && document.setCapture) && document.setCapture();
    this.pointer.x = pointer.clientX;
    this.pointer.y = pointer.clientY;
    this.pointer.isDown = true;

【问题讨论】:

标签: javascript short-circuiting


【解决方案1】:

这是的简写

if (parent) {
    this.parent.next = this
}

【讨论】:

  • 一个非常易于维护的快捷方式。
  • 不会更短
  • 没错。在 javascript 中,任何表达式都可以进行逻辑评估。由于 && 是具有短路功能的二元运算符,因此如果第一个表达式的计算结果为 false(在 javascript 中有几项计算结果为 false),则 && 的正确部分不会被执行。
  • 没有优势。当其他人维护/阅读您的代码时,这只会让您更难理解。
  • @Leushenko if(parent) this.parent.next = this;。那里:现在它是一行并且比那个奇怪的布尔表达式在视觉上更复杂。由于赋值本质上是一个语句(它会产生副作用),因此在大多数情况下尝试将其硬塞到表达式中是一个坏主意,因此最后一点没有实际意义。
【解决方案2】:

如果 parent 为 false 则不弹出 (this.parent.next = this),例如:

parent = false;
parent && alert("not run");

短路评估:

由于逻辑表达式从左到右求值,称为“短路”求值,

variable && (anything); // anything is evaluated if variable = true.
variable || (anything); // anything is evaluated if variable = false

可以用于变量的赋值:

var name = nametemp || "John Doe"; // assignment defaults if nametemp is false
var name = isValid(person) && person.getName(); //assignement if person is valid

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 1970-01-01
    • 2013-10-02
    • 2015-07-21
    • 2013-11-22
    • 2014-09-02
    • 2016-06-10
    • 2014-12-06
    • 1970-01-01
    相关资源
    最近更新 更多