Implement a more rigid is length check

Stuck in an airport today so going to get around to a couple of these things we really should get it

As discussed in https://github.com/jashkenas/underscore/issues/1590 and others. [Here's jdd's implementation for a reference](https://github.com/lodash/lodash/blob/master/lodash.js#L3646-3655), also as discussed in that thread it may make sense to check for a `splice`/`slice` function to  consider a method a true array in places like  `_.isEmpty`
If any of those lengths were treated as 0/the reduce test wasn't correct it
would fail silently
On Dec 28, 2014 2:24 PM, "Michael Ficarra" <notifications@github.com> wrote:

> In test/collections.js
> <https://github.com/jashkenas/underscore/pull/1990#discussion-diff-22299584>
> :
>
> > +    var reducers = ['reduce', 'reduceRight'];
> > +
> > +    var tricks = [
> > +      {length: '5'},
> > +      {
> > +        length: {
> > +          getValue: _.constant(5)
> > +        }
> > +      },
> > +      {length: Math.pow(2, 54)},
> > +      {length: null},
> > +      {length: -2},
> > +      {length: new Number(15)}
> > +    ];
> > +
> > +    expect(tricks.length * (functions.length + reducers.length + 4));
>
> But is it not true that either exactly one test will throw or they will
> all run to completion? How could some of them run but not others without
> exactly one failing?
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/jashkenas/underscore/pull/1990/files#r22299584>.
>