javascript_javascript 기술에서 toString() 강제 실행의 특정 구현

WBOY
풀어 주다: 2016-05-16 17:35:14
원래의
1508명이 탐색했습니다.

원문: 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에서 {} {}는 무엇인가요?
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿