find()와 같은 도우미 메서드를 사용하여 배열 또는 객체 프로토타입을 확장하는 경우 또는 filter()를 사용하는 경우 이러한 메서드가 for in 루프에 나타나지 않도록 하는 것이 중요합니다. 이렇게 하면 잠재적인 문제와 호환성 문제를 방지할 수 있습니다.
JavaScript에서 for in 루프는 객체의 속성을 반복합니다. Array.prototype 또는 Object.prototype에서 사용자 정의 메서드를 정의하는 경우 이러한 메서드는 for-in 루프의 속성으로 나타납니다.
Array.prototype.find = function(testFun) { // ... }; const arr = [1, 2, 3]; for (let prop in arr) { console.log(prop); // Outputs: 1, 2, 3, find }
가장 간단한 해결책은 배열에 for-in 루프를 사용하지 않는 것입니다. 대신 전통적인 for 루프나 forEach()와 같은 Array.prototype 메서드를 사용하세요.
Array.prototype.find = function(testFun) { // ... }; const arr = [1, 2, 3]; for (let i = 0; i < arr.length; i++) { // Do something with arr[i] }
사용하지 않는 오래된 for-in 루프를 처리하려면 메소드 존재 여부를 확인하려면 메소드 정의에 가드 검사를 추가할 수 있습니다.
Object.prototype.hasOwnProperty = function() { // ... }; Array.prototype.find = function(testFun) { if (this.hasOwnProperty('find')) { // Method already exists, do something } else { // Add the method } };
ES5.1에서는 객체에 대해 열거할 수 없는 속성을 정의할 수 있는 Object.defineProperty를 도입했습니다. 이렇게 하면 for in 루프에 속성이 나타나는 것을 방지할 수 있습니다.
Object.defineProperty(Array.prototype, "find", { enumerable: false, // ...
위 기술을 사용하면 방해하지 않는 Array.prototype 및 Object.prototype에 대한 사용자 지정 메서드를 만들 수 있습니다. for-in 루프를 사용합니다. 이는 호환성을 보장하고 예상 동작에 의존하는 다른 코드에 대한 잠재적인 문제를 방지합니다.
위 내용은 사용자 정의 배열 및 객체 프로토타입 메서드가 'for...in' 루프에 표시되는 것을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!