code: function computeBindingValue(node, value, binding, part) {
    if (binding.isCompound) {
      let storage = node.__dataCompoundStorage[binding.target];
      storage[part.compoundIndex] = value;
      value = storage.join('');
    }
    if (binding.kind !== 'attribute') {
      // Some browsers serialize `undefined` to `"undefined"`
      if (binding.target === 'textContent' ||
          (binding.target === 'value' &&
            (node.localName === 'input' || node.localName === 'textarea'))) {
        value = value == undefined ? '' : value;
      }
    }
    return value;
  }
docs: Transforms an "binding" effect value based on compound & negation
  effect metadata, as well as handling for special-case properties
  
  @param {Node} node Node the value will be set to
  @param {*} value Value to set
  @param {!Binding} binding Binding metadata
  @param {!BindingPart} part Binding part metadata
  @return {*} Transformed value to set
  @private