我们用uglify-js缩小我们的代码,我发现了一个在编译以下javascript时使用的奇怪格式:
console.debug(`[NotificationOpenedHandler] Received additionalData:`, data);
if(data.type && data.id) {
// more code...
这将转变为以下内容:
if (console.debug(`[NotificationOpenedHandler] Received additionalData:`, e), e.type && e.id) {
首先我认为它有些编译器错误,可能是uglify-js在尝试最小化代码时生成的,但在测试后似乎(true, true & false)
它是一个有效的表达式(没有语法错误)。
第一个表达式的值并不重要
(true, true & false) // -> false
(true, true & true) // -> true
(false, true & false) // -> false
(false, true & true) // -> true
我的问题,这个表达是什么意思?
答案 0 :(得分:3)
我的问题,这个表达是什么意思?
来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
逗号运算符计算每个操作数(从左到右)并返回最后一个操作数的值(最右边的一个)。
示例:
if (y = f(x), y > x) {
// do something ...
}
首先执行y = f(x)
设置y
的值(取决于x
)。然后检查是否y > x
。如果True
然后do something
,则不执行任何操作。它与:
y = f(x);
if (y > x) {
// do something ...
}
在您的示例中:
(true, true & false)
// process `true` (does nothing)
// returns the result of `true & false` => false
(true, true & true)
// process `true` (does nothing)
// returns the result of `true & true` => true
(false, true & false)
// process `false` (does nothing)
// returns the result of `true & false` => false
(false, true & true)
// process `false` (does nothing)
// returns the result of `true & true` => true
进一步的例子:
(true, true, true, false) // returns false
(false, false, false, true) // returns true
所以,在您的应用程序代码中:
if (console.debug(`[NotificationOpenedHandler] Received additionalData:`, e), e.type && e.id) {
与:
相同console.debug(`[NotificationOpenedHandler] Received additionalData:`, data);
if(data.type && data.id) {