operate(op, right, val) {
    switch (op) {
      case '[]=':
        var self = this
          , range = utils.unwrap(right).nodes
          , val = utils.unwrap(val)
          , len
          , node;
        range.forEach(function (unit) {
          len = self.nodes.length;
          if ('unit' == unit.nodeName) {
            var i = unit.val < 0 ? len + unit.val : unit.val
              , n = i;
            while (i-- > len) self.nodes[i] = nodes.null;
            self.nodes[n] = val;
          } else if (unit.string) {
            node = self.nodes[0];
            if (node && 'object' == node.nodeName) node.set(unit.string, val.clone());
          }
        });
        return val;
      case '[]':
        var expr = new nodes.Expression
          , vals = utils.unwrap(this).nodes
          , range = utils.unwrap(right).nodes
          , node;
        range.forEach(function (unit) {
          if ('unit' == unit.nodeName) {
            node = vals[unit.val < 0 ? vals.length + unit.val : unit.val];
          } else if ('object' == vals[0].nodeName) {
            node = vals[0].get(unit.string);
          }
          if (node) expr.push(node);
        });
        return expr.isEmpty
          ? nodes.null
          : utils.unwrap(expr);
      case '||':
        return this.toBoolean().isTrue
          ? this
          : right;
      case 'in':
        return super.operate(op, right);
      case '!=':
        return this.operate('==', right, val).negate();
      case '==':
        var len = this.nodes.length
          , right = right.toExpression()
          , a
          , b;
        if (len != right.nodes.length) return nodes.false;
        for (var i = 0; i < len; ++i) {
          a = this.nodes[i];
          b = right.nodes[i];
          if (a.operate(op, b).isTrue) continue;
          return nodes.false;
        }
        return nodes.true;
        break;
      default:
        return this.first.operate(op, right, val);
    }
  }
Operate on `right` with the given `op`.

@param {String} op
@param {Node} right
@return {Node}
@api public