When oldValue is used in onChange client scripts it always return empty value instead of the previous value. An example:
onChange client script is set to run on Short description field. When the client script triggered the oldValue is returning empty instead of what the user previously entered in the Short description field prior to saving the change.
The change has not been saved yet so the previous value (oldValue) is always empty (assuming there's no value in the field prior to the change).
The field in which the onChange client script is executing against needs to have a value saved in the database first before oldValue can work to return the previous value saved.
Example of when it returns a value:
1) Short description is saved with a value of "ABC".
2) When onChange client script is executed oldValue would return "ABC".
Example of when it does not return any value:
1) "ABC" is entered into short description field but it's not saved.
2) When onChange client script is executed oldValue would return "" (empty value).
In either case, both are expected behaviors.