Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么是表达&&;表达式语法是什么意思?_Javascript_Short Circuiting - Fatal编程技术网

Javascript 什么是表达&&;表达式语法是什么意思?

Javascript 什么是表达&&;表达式语法是什么意思?,javascript,short-circuiting,Javascript,Short Circuiting,这一行的作用是什么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 Ima

这一行的作用是什么
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()

这是英语的简写

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

如果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

这是一个非常方便维护的快捷方式。不太直接。在javascript中,任何表达式都可以进行逻辑计算。由于&&是一个带短路的二进制运算符,如果第一个表达式的计算结果为false(javascript中有几个表达式的计算结果为false),则不会执行&&的正确部分。这没有什么好处。如果(parent)this.parent.next=this,那么当其他人维护/读取您的代码时,它只会使您更难理解。@Leushenko
。这里:现在它只有一行,视觉上没有那个奇怪的布尔表达式复杂。由于赋值基本上是一个语句(它会产生副作用),所以在大多数情况下,试图将其硬塞进表达式中是一个坏主意,这样最后一点就没有意义了。另请参见和
var name = nametemp || "John Doe"; // assignment defaults if nametemp is false
var name = isValid(person) && person.getName(); //assignement if person is valid