解释此函数如何删除负值

i-a*_*all 2 javascript arrays loops

function bouncer(arr) {
  // Don't show a false ID to this bouncer.

  for (var i = 0; i < arr.length; i++) {
        if (!arr[i]) {
            arr.splice(i, 1);
            i = i-1;
        }
    }
    return arr;

}

bouncer([7, "ate", "", false, 9]);
Run Code Online (Sandbox Code Playgroud)

我不明白感叹号在条件中是如何工作的.我知道它已经习惯了否定,但我不知道如何.

Jon*_*lms 5

if (!arr[i]) {
Run Code Online (Sandbox Code Playgroud)

基本上意味着如果不是arr [i].这适用于js中的值是truthy或falsy,所以只有falsy值会传递上限条件(如果不是falsy === true):

null,undefined,"",0,false
Run Code Online (Sandbox Code Playgroud)