The problem with some of the other solutions is that they are of O(n²) complexity, if they're using a for loop inside of a for loop. That's slow! You don't need to sort either—also slow.
We can speed this up to O(2n) complexity1 by using a simple dictionary. This adds O(2n) storage, but that hardly matters.
JavaScript
var isEqual = function (arr1, arr2) {
    if (arr1.length !== arr2.length) {
        return false;   // no point in wasting time if they are of different lengths
    } else {
        var holder = {}, i = 0, l = arr2.length;
        // holder is our dictionary
        arr1.forEach(function (d) {
            holder[d] = true;    // put each item in arr1 into the dictionary
        })
        for (; i < l; i++) {     // run through the second array
            if (!(arr2[i] in holder)) return false;
            // if it's not in the dictionary, return false
        }
        return true;    // otherwise, return true
    }
}
Test Case
var arr1 = ["barry", "beth", "debbie"],
    arr2 = ["beth", "barry", "debbie"];
console.log(isEqual(arr1,arr2));
// returns true
Improvement
As Ahruss pointed out, the above function will return true for two arrays that are seemingly equal. For example, [1,1,2,3] and [1,2,2,3] would return true. To overcome this, simply use a counter in the dictionary. This works because !undefined and !0 both return true.
var isReallyEqual = function (arr1, arr2) {
    if (arr1.length !== arr2.length) {
        return false;   // no point in wasting time if they are of different lengths
    } else {
        var holder = {}, i = 0, l = arr2.length;
        // holder is our dictionary
        arr1.forEach(function (d) {
            holder[d] = (holder[d] || 0) + 1;
            // checks whether holder[d] is in the dictionary: holder[d] || 0
            // this basically forces a cast to 0 if holder[d] === undefined
            // then increments the value
        })
        for (; i < l; i++) {     // run through the second array
            if (!holder[arr2[i]]) {    // if it's not "in" the dictionary
                return false;          // return false
                // this works because holder[arr2[i]] can be either
                // undefined or 0 (or a number > 0)
                // if it's not there at all, this will correctly return false
                // if it's 0 and there should be another one
                // (first array has the element twice, second array has it once)
                // it will also return false
            } else {
                holder[arr2[i]] -= 1;    // otherwise decrement the counter
            }
        }
        return true;
        // all good, so return true
    }
}
Test Case
var arr1 = [1, 1, 2],
    arr2 = [1, 2, 2];
isEqual(arr1, arr2);          // returns true
isReallyEqual(arr1, arr2);    // returns false;
1: It's really O(n+m) complexity, whereby n is the size of the first array and m of the second array. However, in theory, m === n, if the arrays are equal, or the difference is nominal as n -> ∞, so it can be said to be of O(2n) complexity. If you're feeling really pedantic, you can say it's of O(n), or linear, complexity.