JavaScript 변수가 배열인지 객체인지 어떻게 확인하나요?
답변:
1. 단지 typeof를 사용하여 변수가 배열인지 객체인지 확인하면 'objec'이 반환됩니다.
이 질문에 대한 가능한 대답은 변수가 객체인지 확인하고 변수에 숫자 길이가 있는지 확인하는 것입니다(빈 배열인 경우 길이가 0일 수도 있음).
그러나 매개변수 개체[인수 개체](지정된 함수에 전달된 모든 매개변수)도 위 메서드에 적용될 수 있습니다. 기술적으로 말하면 매개변수 개체는 배열이 아닙니다.
또한 객체에 .length 속성이 있는 경우 이 방법이 작동하지 않습니다.
// Real array 正在的数组 var my_array = []; // Imposter! 冒名顶替的! var my_object = {}; my_object.length = 0; // Potentially faulty 潜在的错误 function is_this_an_array(param) { if (typeof param === 'object' && !isNaN(param.length)) { console.log('Congrats, you have an array!'); } else { console.log('Bummer, not an array'); } } // Works 成功 is_this_an_array(my_array); // Works, but is incorrect 成功了,但是不正确 is_this_an_array(my_object);
2. 이 질문에 대한 또 다른 대답은 더 미묘한 방법을 사용하여 toString() 메서드를 호출하여 변수를 해당 유형을 나타내는 문자열로 변환하는 것입니다.
이 방법은 실제 배열에 사용할 수 있습니다. 매개변수 객체가 문자열로 변환되고 [객체 인수]가 반환되면 변환이 실패합니다. 또한
숫자 길이 속성을 포함하는 객체 클래스에 대해서도 변환이 실패합니다.
// Real array 真正的数组 var my_array = []; // Imposter! 冒名顶替的! var my_object = {}; my_object.length = 0; // Rock solid 坚如磐石(检验函数) function is_this_an_array(param) { if (Object.prototype.toString.call(param) === '[object Array]') { console.log('Congrats, you have an array!'); } else { console.log('Bummer, not an array'); } } // Works 成功了 is_this_an_array(my_array); // Not an array, yay! 不是数组(array)! is_this_an_array(my_object);
3. 또한, instanceof는 신뢰할 수 없는 다중 프레임 DOM 환경에 완벽하게 적합한 작업입니다.
var my_array = []; if (my_array instanceof Array) { console.log('Congrats, you have an array!'); }
4 Javascript 1.8.5(ECMAScript 5)의 경우 변수 이름 .isArray()를 사용하면 이 목적을 달성할 수 있습니다
var my_array = []; if (Array.isArray(my_array)) { console.log('Congrats, you have an array!'); }
위 내용은 JavaScript 변수가 배열인지 객체인지 확인하는 방법 자세한 코드 설명은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!