Идентификация объекта массива

Как узнать, является ли объект массивом или нет?

 var x=[];

console.log(typeof x);//output:"object"
alert(x);//output:[object Object]
console.log(x.valueOf())//output:<blank>? what is the reason here?
console.log([].toString()); also outputs <blank>     
Object.prototype.toString.call(x) output:[object Array] how?

поскольку console.log([]. toString()); выходы: пустые

первая:

почему я получаю пустое на втором последнем заявлении?

второй:

Есть ли способ точно узнать, что такое объект: Array или plain Object ({}) без помощи их соответствующих методов, таких как x.join(), указывает, что x является массивом, а не таким образом.

Фактически, при выборе jquery, например $ ("p"), возвращается объект jquery, поэтому, если я использую

console.log(typeof $("p"));//output:"object

Я просто хотел узнать фактическое имя объекта. Это его. Спасибо за помощь

Ответ 1

В чистом JavaScript вы можете использовать следующий подход кросс-браузера:

if (Object.prototype.toString.call(x) === "[object Array]") {
    // is plain array
}

Для jQuery есть специальный метод:

if ($.isArray(x)) {
    // is plain array
}

Ответ 2

Вы можете использовать instanceof. Вот некоторые тесты FireBug:

test1 = new Object();
test2 = new Array();
test3 = 123;

console.log(test1 instanceof Array); //false
console.log(test2 instanceof Array); //true
console.log(test3 instanceof Array); //false

Ответ 3

Лучшей практикой является вызов Object.prototype.toString() для целевого объекта, который отображает внутреннее имя свойства [[Class]].

Object.prototype.toString.call( x ); // [object Array]

У этого есть приключение, что он работает на любом и каждом объекте, независимо от того, работаете ли вы в среде с несколькими кадрами/окнами, что создает проблемы при использовании x instanceof Array.


Более новые реализации ES5 также дают вам метод Arrays.isArray(), который возвращает true или false.

Array.isArray( x ); // true

И последнее, но не менее важное: у jQuery есть свой собственный .isArray(), который также возвращает логическое

jQuery.isArray( x ); // true

Ответ 4

Просто:

if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
    alert( 'Array!' );
}

Ответ 6

Я думаю, вы ищете что-то вроде этого:

if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
    alert( 'Array!' );
}

Надеюсь это поможет. Немного замедлить: P