function ConditionalNode(condition, trueExpr, falseExpr) {
    if (!(this instanceof ConditionalNode)) {
      throw new SyntaxError('Constructor must be called with the new operator');
    }

    if (!type.isNode(condition)) throw new TypeError('Parameter condition must be a Node');
    if (!type.isNode(trueExpr)) throw new TypeError('Parameter trueExpr must be a Node');
    if (!type.isNode(falseExpr)) throw new TypeError('Parameter falseExpr must be a Node');
    this.condition = condition;
    this.trueExpr = trueExpr;
    this.falseExpr = falseExpr;
  }
A lazy evaluating conditional operator: 'condition ? trueExpr : falseExpr'

@param {Node} condition   Condition, must result in a boolean
@param {Node} trueExpr    Expression evaluated when condition is true
@param {Node} falseExpr   Expression evaluated when condition is true

@constructor ConditionalNode
@extends {Node}