docs: function(obj, key) {
  		if( obj == null ) {
  			return false;
  		}
  		if (typeReflections.isPrimitive(obj)) {
  			if (hasOwnProperty.call(obj, key)) {
  				return true;
  			} else {
  				var proto;
  				if(getPrototypeOfWorksWithPrimitives) {
  					proto = Object.getPrototypeOf(obj);
  				} else {
  					// IE-remove-start
  					proto = obj.__proto__; // jshint ignore:line
  					// IE-remove-end
  				}
  				if(proto !== undefined) {
  					return key in proto;
  				} else {
  					// IE-remove-start
  					return obj[key] !== undefined;
  					// IE-remove-end
  				}
  			}
  		}
  		var hasKey = obj[canSymbol.for("can.hasKey")];
  		if(hasKey) {
  			return hasKey.call(obj, key);
  		}
  
  		var found = shapeReflections.hasOwnKey(obj, key);
  
  		return found || key in obj;
  	}