Идентификация объекта массива
Как узнать, является ли объект массивом или нет?
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!' );
}
Ответ 5
http://api.jquery.com/jQuery.isArray/
if($.isArray(x)){
alert("isArray");
}
Ответ 6
Я думаю, вы ищете что-то вроде этого:
if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
alert( 'Array!' );
}
Надеюсь это поможет. Немного замедлить: P