1. 실제 배열을 판단하는 방법
JavaScript에서 배열을 선언하는 가장 쉬운 방법은 다음과 같습니다.
var a = [];
배열인지 여부를 결정하는 가장 직접적인 방법은 다음과 같습니다.
코드 사본은 다음과 같습니다.
배열 인스턴스 // true
a.constructor == array // true
여기에는 구문의 인스턴스가 있습니다. 인스턴스는 클라우드 연산자입니다. "+-*/"와 마찬가지로 구문은 다음과 같습니다.
결과 = OBJ 클래스의 Intance
객체가 클래스의 인스턴스인지 여부를 결정하는 데 사용되며 작동 결과는 true 또는 false를 반환합니다. JavaScript의 클래스의 정의는 생성자를 통해 초기화되므로 구문의 인스턴스의 올바른 연산자는 함수 인스턴스 여야합니다. 즉, 클래스 인스턴스 기능이 사실이어야하며, 인스턴스를 사용할 때 올바른 연산자가 기능이 아닌 경우 타입 공인 예외가 발생됩니다. 모든 객체는 객체의 인스턴스이므로 객체의 모든 객체 인스턴스는 true를 반환합니다. 우리는 객체가 생성자를 통해 초기화된다고 말하지만 인스턴스는 객체가 함수에 의해 구성되는지 여부를 확인하지 않지만 생성자의 프로토 타입에 의해 상속됩니다. 다음 예는이 문제를 설명 할 수 있습니다.
코드 사본은 다음과 같습니다.
함수 범위 (낮음, 높은) {
this.low = 낮음;
this.high = 높음;
}
Range.prototype.constructor == 범위; //진실
Range.prototype = {
function (x) {return (x> = this.low && x <= this.high); },
제외 : function (x) {return (x <this.low && x> this.high); }
}
var r = 새로운 범위 (0, 100);
R 인스턴스 범위; //거짓
r 인스턴스 객체; //진실
Range.prototype.constructor == 객체; //진실
R은 새로운 범위를 통해 구성되지만 R은 범위의 인스턴스가 아닙니다. 이것이 문제입니다. range.prototype 할당 문은 기본 생성자를 대체합니다. 프로토 타입을 할당하기 전에 범위 .prototype.constructor가 범위이며 할당 된 후에는 객체가됩니다. 이해하기 쉽습니다
코드 사본은 다음과 같습니다.
Range.prototype = {
function (x) {return (x> = this.low && x <= this.high); },
제외 : function (x) {return (x <this.low && x> this.high); }
}
실제로 :
코드 사본은 다음과 같습니다.
range.prototype = 새 개체 ({{
function (x) {return (x> = this.low && x <= this.high); },
제외 : function (x) {return (x <this.low && x> this.high); }
});
range.prototype.constructor == 객체, 그러면 새로운 범위를 통해 생성 된 인스턴스는 물론 객체 인스턴스입니다.
공식적인 설명을 보는 것이 더 직접적입니다.
연산자 인스턴스는 실제로 R이 범위 생성자에 의해 초기화되었는지 여부를 확인하지 않습니다. Range.prototype에서 상속되는지 확인합니다.
JavaScript에는 인스턴스와 유사한 함수를 갖는 함수 유형이 있지만 숫자, 문자열, 함수, 객체, 정의되지 않은, 부울 등 특정 기본 데이터 유형을 반환합니다. 이 6 가지 유형 만 있으며,이 6 가지 유형은 6 가지 유형 내에 있지 않습니다. 즉, 배열이 아닌 객체를 입력합니다.
관련된 또 다른 구문은 생성자이며 생성자는 물체의 생성자를 반환합니다.
코드 사본은 다음과 같습니다.
var a = [];
A. 건설자; //정렬
생성자는 객체의 초기화 기능으로 새 호출을 사용합니다. 객체가 배열 인 경우 프로토 타입의 생성자가 변경 될 수 있으므로 생성자가 배열이어야하며 작성자가 반드시 사실은 아닙니다.
2. 의사-배열을 판단하는 방법
JavaScript에는 의사 건조가 있습니다. 배열과 유사한 트래버스 방법을 사용하여 통과 할 수 있습니다. 요소의 길이를 얻는 길이 속성이 있습니다. [] 첨자를 사용하여 지정된 요소를 얻을 수 있습니다. 우리는 이런 종류의 물체를 의사의 배열이라고 부릅니다. jQuery의 물체는 아래 그림과 같이 전형적인 의사 배열입니다.
따라서, 유사 계절인지 판단하는 열쇠는 길이 속성이 있는지 여부와 기본 배열 작동 함수 스플 라이스가 있는지 판단하는 것입니다. 다음은 판단 방법입니다.
코드 사본은 다음과 같습니다.
var is_array = function (value) {
반환 가치 &&
타입 값 === 'Object'&&
타입 값 .length === '번호'&&
typeof value.splice === 'function'&&
! (value.propertyisEnumerable ( 'length'));
};
여기서 Propertyisenumerable은 길이 속성이 열거 가능한지 여부를 결정하는 데 사용됩니다. 실제로, 기본 문자열 객체에는 배열 효과가 있지만 배열 객체로 취급 할 수는 없으므로 String 객체의 유형이 문자열을 반환하기 때문에 value == "Object"를 판단해야합니다.