[javascript] JavaScript : 인수가 객체 대신 배열인지 감지 (Node.JS)
typeof []
반환 하기 때문에 인수가 배열인지 어떻게 감지해야 'object'
하며 배열과 객체를 구별하고 싶습니다.
객체가 마치 {"0":"string","1":"string","length":"2"}
배열 처럼 보일 수도 있지만 실제로 배열처럼 보이는 객체라면 배열로 나오지 않기를 바랍니다.
JSON.parse
그리고 JSON.stringify
이 구별을 할 수 있습니다. 어떻게하니?
Chrome과 동일한 V8 기반 Node.JS를 사용하고 있습니다.
답변
Array.isArray
기본 V8 기능. 빠르고 항상 정확합니다. 이것은 ES5의 일부입니다.
arr instanceof Array
객체가 배열 생성자로 만들어 졌는지 확인합니다.
밑줄의 방법. 다음은 소스에서 가져온 스 니펫입니다.
var toString = Object.prototype.toString,
nativeIsArray = Array.isArray;
_.isArray = nativeIsArray || function(obj) {
return toString.call(obj) === '[object Array]';
};
이 메서드는 개체를 가져와 Object.prototype.toString
그에 대한 메서드를 호출합니다 . 이것은 항상 [object Array]
배열에 대해 반환 됩니다.
내 개인적인 경험에서 나는 toString
방법을 묻는 것이 가장 효과적이라는 것을 알지만 그것은 짧거나 읽기 쉽고 instanceof Array
빠르지는 Array.isArray
않지만 ES5 코드이며 이식성을 위해 사용하지 않는 경향이 있습니다.
저는 개인적 underscore
으로 일반적인 유틸리티 메서드가 포함 된 라이브러리 인를 사용해 보는 것이 좋습니다 . 코드를 건조시키는 유용한 기능이 많이 있습니다.
답변
이 코드를 시도하십시오.
Array.isArray(argument)
답변
어때 :
your_object instanceof Array
Chrome의 V8에서는
[] instanceof Array
> true
({}) instanceof Array
> false
({"0":"string","1":"string","length":"2"}) instanceof Array
> false
답변
이 질문에 몇 가지 좋은 답변이있는 것 같지만 완전성을 위해 이전에 제안되지 않은 다른 옵션을 추가합니다.
무언가가 배열인지 확인하기 위해 Node.js util
네이티브 모듈과 그 isArray()
기능을 사용할 수 있습니다 .
예:
var util = require('util');
util.isArray([]); // true
util.isArray(new Array); // true
util.isArray({"0":"string","1":"string","length":"2"}); // false
이 방법을 사용하면 항상 올바른 답을 보여주기 때문에 V8에서 구현 한 JS 표준에 대해 걱정할 필요가 없습니다.
답변
이 방법을 시도해보십시오 :
console.log (Object.prototype.toString.call (arg) .replace (/ ^ [object (. +)] $ /, ‘$ 1’). toLowerCase ())