As it was said you cannot mutate the string, so the expression newStr.split("") returns NEW string value and as you don’t save this new value anywhere, it’s just discarded. And the initial value of the string that is in the variable newStr remains untouched.
No it is not. The split method would create an array from a string. I think what you are missing is the str.toLowerCase() returns a new string and does not affect the original str at all. You can take the value returned from calling str.toLowerCase and assign it to a new variable (call it what you want). Then you can work with it for the remainder of the function.
Isn’t actually changing all letters to be lowercase because it is not being assigned to any variable, therefore it’s just executing where it changed all the letters to be lower case, but then it’s no assigning it to anything therefore it’s useless alone