Because the goal is to avoid doing unnecessary WebGL calls, cache each value passed into the WebGL API. For example, in GraphicsContext, add:

// blend color state initialized with WebGL defaults.
double _blendColorR = 1.0;
double _blendColorG = 1.0;
double _blendColorB = 1.0;
double _blendColorA = 1.0;

when setting the blend state:

if (blendState.blendColorRed != _blendColorR || blendState.blendColorGreen != _blendColorG || ... ) {
  // make WebGL call.
  // update cache values
  _blendColorR = blendState.blendColorRed;
 _blendColorG = blendState.blendColorGreen;
}

etc...