2012-10-31 4 views
5

는 I에서는 다음과 같은 구문을 사용하는 것이, 이러한 선로 (7)에 this one 같이 여러 MDN 배열 방법 심에 주목 : this 배열이다개체 (this)는 무엇을합니까?

var t = Object(this); 

. 유효성 검사기에서 힌트를 얻지 못했을뿐만 아니라, 내가하는 일에 대해서도 단서가 없습니다.

빛을 비추는 사람이 있습니까?

+0

C++의 복사 생성자와 다른가요? –

+2

가능한 복제본 [var t = Object (this)]의 요점은 forEach의 공식 구현에서 무엇입니까?] (http://stackoverflow.com/questions/6498487/whats-the-point-of-var-t) -objectthis-in-the-official-implementation-for-for) – finnw

답변

3

내가 알 수있는 한, 문자열 리터럴을 Array.prototype.indexOf에 전달할 때이 문자를 사용하는 것만 알면됩니다. 당신이 그것을 제거하고 오류 얻을에 문자열을 전달하는 경우 : String의 인스턴스에 리터럴 문자열을 주조로, 그러나

TypeError: Cannot use 'in' operator to search for '0' in string

을, 당신은 문자열의 각 문자에 대한 숫자 속성을 가진 객체와 끝까지 그것은 정상적인 객체이기 때문에, 당신이 그것을에 in 연산자를 사용할 수 있으며 방법은 문자열의 문자의 인덱스를 반환하고 :

Array.prototype.indexOf.call("hello", "e"); // Returns 1 

여기 an example with the cast to Object, 그리고 여기 an example without it을합니다. Object 생성자에 아무것도 전달보다 일반적인 경우


는, 객체에 그 일을 변환하려고합니다. 따라서 문자열 리터럴을 전달하고 String의 인스턴스를 가져 오거나 숫자 리터럴을 전달하고 Number의 인스턴스를 가져올 수 있습니다.

+0

기본적으로 모든 부울 값, 즉 부울, 숫자, 'null'또는 'undefined'에 대해서는 작동하지 않습니다. – Bergi

+0

@Bergi - 그 코드의 이유가 무엇인지 모르겠습니다 ... [현재 MDN에있는] polyfill에 없습니다 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf # Polyfill). 나는이 대답을 위해 그것을 연구하는 것을 막연히 기억하고있다. 그러나 그것은 분명히 얼마 전이었다. –

+0

예, [MDN은 위키입니다] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf$history?limit=all). – Bergi