[[ ]] is a Bash keyword, so the shell parses it specially: unquoted variables are not word-split or glob-expanded, and it adds ==/=~ pattern matching. Option two is backwards — [ is the command-like builtin and neither is external. Option three is false — comparison stays string unless you use -eq. Option four is false — both forms support -f/-d.
Official docs