원문: toString() 시행
번역: Javascript에서 toString() 시행
번역자: singleseeker
Javascript는 일반적으로 Methods 또는 연산자는 값을 필요한 유형으로 자동 변환해야 하며, 이로 인해 다양한 오류가 발생할 수 있습니다. Brian McKenna(@puffnfresh) 제안은 다음 테스트 코드를 제공했습니다.
Object.prototype.valueOf = function () {
throw new Error('명시적 toString 사용')
}; sS ]* n
이 코드는 어떤 영향을 미치나요? 더 이상 객체를 문자열로 변환하기 위해 더하기 연산자를 사용할 수 없습니다:
[code]
> var obj = {}> 'Hello ' obj
오류: 명시적인 toString 사용
> String(obj)
'[객체 객체]'
> obj.toString()
'[객체 객체]'
> 'Hello' String(obj)
'Hello [object Object]'에 무슨 일이 일어나고 있나요? 객체를 특정 기본 유형 T로 변환하려면 먼저 해당 값을 기본 유형으로 변환한 다음 T로 변환합니다. 이전 변환은 두 단계로 완료됩니다.
1. 기본 유형을 반환한 다음
2를 종료합니다. 그렇지 않으면 toString() 메서드를 호출합니다. 기본형이 반환되면 종료
3. 그렇지 않으면 오류가 발생합니다마지막 변환이 숫자 값인 경우 valueOf() 및 toString을 호출하는 위의 순서가 됩니다.
마지막 변환이 문자열이면 toString이 먼저 호출됩니다. 더하기 연산자는 값을 숫자 또는 문자열 유형으로 변환할 수 있지만
일반적으로 숫자 연산을 기반으로 기본 유형
을 생성합니다.
기사 시작 부분에 게시된 코드 조각 대신 Object.prototype.valueOf()는 개체 자체를 반환합니다. 이는 기본 개체에서 상속된 재정의되지 않은 메서드입니다.
코드 복사
true 더하기 연산자는 결국 toString()을 호출합니다. 위의 코드 조각은 호출을 차단하고 메서드가 호출되기 전에 오류를 발생시킵니다.
이 오류 메시지가 항상 완전히 올바른 것은 아닙니다.
코드 복사
오류: 명시적인 toString을 사용하세요. 하지만 이 방법은 확실히 유용합니다.
객체를 숫자로 변환하려면 어쨌든 자체 valueOf 메서드를 호출해야 합니다.
@singleseeker
Wordy: 이 글은 더 불만스럽게 번역되어 있고, 지식 포인트도 잘 정리되어 있습니다. 그런데 영어가 모국어가 아닌 외국인이 쓴 영어 기술 글이라, 모국어가 영어가 아닌 초보 번역가로서 정말 괴로운 일입니다. 간략한 요약은 다음과 같습니다.
1. 일반적으로 valueof()는 변환되지 않은 객체 자체를 반환함을 나타냅니다.
2. Date 객체를 제외하고 플러스 연산자는 거의 항상 valueof() 메서드를 먼저 호출합니다.
3. ()는 명확한 기본 숫자 유형을 반환한 다음 객체가 문자열에 추가되면 toString()이 호출되지 않습니다
참조1.
객체(객체)를 기본 형식으로 강제
2.
JavaScript에서 {} {}는 무엇인가요?