在更易读的代码中转换javascript一行

时间:2016-05-24 12:15:00

标签: javascript encryption

我正在尝试理解Javascript中的单行代码,但这不是很明显。

有效的路线:

this._iconNeedsUpdate = !0,this._expandBounds(t), t instanceof L.MarkerCluster ? (e || (this._childClusters.push(t), t.__parent = this), this._childCount += t._childCount) : (e || this._markers.push(t), this._childCount++), this.__parent && this.__parent._addChild(t, !0)

我尝试使用下面的代码转换,但它不起作用:

this._iconNeedsUpdate = !0;
this._expandBounds(t);
if (t instanceof L.MarkerCluster) {
    if (!e) {
        this._childClusters.push(t);
        t.__parent = this;
    } else {
        this._childCount += t._childCount;
    }
} else { 
    if (!e) {
        this._markers.push(t);
        this._childCount++;
    }
}
if (this.__parent) {
    this.__parent._addChild(t, !0);
}

有什么想法吗?

谢谢!

在你的帮助之后,好的代码是:

this._iconNeedsUpdate = true;
this._expandBounds(t);

if (t instanceof L.MarkerCluster) {
  if (!e) {
    this._childClusters.push(t);
    t.__parent = this;
  }
  this._childCount += t._childCount
} else {
  if (!e) {
    this._markers.push(t);
  }
  this._childCount++;
}
if (this.__parent) {
  this.__parent._addChild(t, true);
}

谢谢!

1 个答案:

答案 0 :(得分:0)

三元条件运算符的优先级最低。

此外,(A || B), C只有当A是假的时候才会评估B,但是C总是会被评估。

所以等效的代码是:

this._iconNeedsUpdate = true;
this._expandBounds(t);

if (t instanceof L.MarkerCluster) {
  if (!e) {
    this._childClusters.push(t);
    t.__parent = this;
  }
  this._childCount += t._childCount
} else {
  if (!e) {
    this._markers.push(t);
  }
  this._childCount++;
}
if (this.__parent) {
  this.__parent._addChild(t, true);
}