			function expressionInputDirtyCheck(newValue, oldValueOfValue) {
				if (newValue == null || oldValueOfValue == null) {
					// null/undefined
					return newValue === oldValueOfValue;
				}

				if (typeof newValue === "object") {
					// attempt to convert the value to a primitive type
					// TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can
					//             be cheaply dirty-checked
					newValue = getValueOf(newValue);

					if (typeof newValue === "object") {
						// objects/arrays are not supported - deep-watching them would be too expensive
						return false;
					}

					// fall-through to the primitive equality check
				}

				//Primitive or NaN
				// eslint-disable-next-line no-self-compare
				return (
					newValue === oldValueOfValue ||
					(newValue !== newValue && oldValueOfValue !== oldValueOfValue)
				);
			}
The software constructs all or part of a command, data structure, or record using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify how it is parsed or interpreted when it is sent to a downstream component.