JavaScript怪异的赋值代码

时间:2016-09-04 09:00:12

标签: javascript

我在一个项目中找到了这行代码,但我无法在

下找到
return d.isPointInside(a, b) ? (console.log("runned"), c = !0, !1) : void 0

我无法理解这部分:

(console.log("runned"), c = !0, !1)

“runned”这个词应该显示在浏览器的控制台中,但需要一些帮助才能理解其余部分。

3 个答案:

答案 0 :(得分:4)

只是一些类型的juggeling

!0 === true
!1 === false
void 0 === undefined

结果有些较长的单词:

(console.log("runned"), c = true, false);

完整的return语句如下所示,不使用Comma Operator

if (d.isPointInside(a, b)) {
    console.log("runned");
    c = true;
    return false;
} else {
    return undefined;
}

答案 1 :(得分:2)

逗号只是创建一个序列,所以最终这个语句将返回!1,这是假的。代码利用序列语法产生输出到控制台和设置变量的副产品。

它类似于:

var a,b,c;

其中声明变量但不对它们做任何事情。这同样有效:

var a = 7,b = someComplexCalculation(),c;

!1是假的,并且有点无用,但在JavaScript中这是一个有用的形式,因为它强制类型为布尔值。在开发时,将!1更改为!a可能很有用,保证返回布尔值。

序列的最后一个值完成语句,并作为返回值。

所以:

X =(3,Math.sqrt(2),"某事");

将X ="设置为"

答案 2 :(得分:1)

首先,代码使用JavaScript中的comma operator来评估所有内容,但只返回最后一个元素。例如,var a = 1, 2, 3;将始终等于3,因为只返回最后一项。

考虑到这一点,让我们看一下您不理解的代码:

(console.log("runned"), c = !0, !1)

由于逗号运算符,这会分解为三个表达式,这些表达式将按顺序进行评估:

console.log("runned")

将在控制台中打印给定的单词。

c = !0

true的值分配给变量c。这是因为零是一个假值,当使用非运算符!转换为相反值时会生成true

`!1`

最后,将从括号内的整个部分返回此表达式的结果。与上述类似,这使用1是真值的事实,因此!1将产生false

因此,作为一个整体,代码将打印,分配一个值,并在一行中返回一个值。

鉴于语法和使用的变量,我的假设是这是缩小的代码。缩小以类似方式使用语言规则以减少使用的字符数。在!0!1中,truefalseIf the snow cones are red, white or green play the song at the bottom If they are not red, white or green play Happy Birthday Song Play the National Anthem use Illuminate\Support\Facades\DB;的非常常见的替代品,因为后者的长度至少是其一半。