The main difference between the "contains" and "indexOf" functions is their return types. "Contains" returns a boolean value, indicating whether the value or substring exists, whereas "indexOf" returns the index of the first occurrence of the value or substring. If the value or substring is not found, "indexOf" returns -1.