Step 1: Write the function piecewise.
We have $f(x)=|x|-x$. Using $|x|=x$ for $x\ge 0$ and $|x|=-x$ for $x<0$, we get $f(x)=0$ when $x\ge 0$ and $f(x)=-2x$ when $x<0$.
Step 2: Recall the definitions.
A function is injective if different inputs give different outputs, and surjective if every value in the codomain is actually hit. A bijection is both.
Step 3: Test option (1) and option (3).
On domain $[0,\infty)$ the function is $f(x)=0$ for all $x$, a constant. A constant function maps many inputs to the same output, so it is not injective. Both of these options claim injectivity or bijectivity on $[0,\infty)$, so both are false.
Step 4: Test option (2).
On domain $(-\infty,0]$ we have $f(x)=-2x\ge 0$, so the outputs land in $[0,\infty)$, not in the stated codomain $(-\infty,0]$. The map cannot be onto that codomain, so it is not a bijection there. Option (2) is false.
Step 5: Test option (4).
Take domain $R$ and codomain $[0,\infty)$. For $x<0$, $f(x)=-2x$ sweeps through all positive values, and $f(0)=0$, so every value in $[0,\infty)$ is attained. Hence $f$ is surjective onto $[0,\infty)$.
Step 6: Check injectivity in option (4).
But $f(1)=0$ and $f(2)=0$ give the same output for different inputs, so $f$ is not injective. Therefore on $R\to[0,\infty)$ it is a surjection but not an injection, exactly what option (4) states.
\[ \boxed{\text{Option (4): surjection but not injection on } R\to[0,\infty)} \]