함수나 메소드 호출을 통해 특정 유형을 다른 유형으로 명시적으로 변환하는 것을 명시적 변환이라고 하고, 그 반대를 암시적 유형 변환이라고 합니다. "표시 유형 변환" 및 "암시적 유형 변환"이라는 단어는 Google 및 Wikipedia에서 찾을 수 없습니다. 그렇게 부르자.
1. 연산 시 암시적 유형 변환
1, " " 연산자
var a = 11, b = '22';
var c = a b
여기서 엔진은 먼저 a를 문자열 "11"로 변환한 다음 연결합니다. b 를 사용하면 "1122"가 됩니다. 어떤 사람들은 b를 숫자 22로 바꾸고 산술 덧셈을 수행하면 c는 33이 되지 않을까 궁금해할 것입니다. 연산자 " "의 양쪽 중 하나가 숫자 유형이고 다른 하나가 문자열 유형인 경우 js 엔진에서는 산술 덧셈 연산 대신 문자열 연결 연산을 수행하도록 규정할 이유가 없습니다. 연산자 " "의 기능을 이용하면 Number를 String으로 쉽게 변환할 수 있습니다. 예를 들어,
var a = 11; 🎜>alert(typeof a); //-->number
a ''
alert(typeof a) //-->string
2," -" 연산자
"-"는 단항 연산자(음수) 또는 이항 연산자(뺄셈 연산)일 수 있습니다. 예를 들어
var a = 11, b = '5';
var c = a - b;
alert(typeof c); //--> number
위의 " "와 반대입니다. 문자열 b는 암시적으로 숫자 5로 변환된 다음 산술 뺄셈이 수행됩니다. 이 기능을 사용하면 문자열을 숫자로 쉽게 변환할 수 있습니다
var a = '11';
a - ''
alert(typeof a);// -->number
두 개의 문에서 암시적 유형 변환
1, if
var obj = {name:'jack'}
if(obj){
//do more
}
여기서 obj는 암시적으로 부울 유형으로 변환됩니다.
2, while
var obj = {name:'jack'}
while(obj){
//더 많은 작업 수행
}
if와 동일
3, for in
객체 리터럴을 정의할 때 식별자에서 문자열로의 암시적 변환이 발생하는 경우 유형 변환이 발생합니다.
var person = {'name':' jack', "age":20,school:'PKU'}
for(var a in person){
Alert(a ": " typeof a)
여기서는 이름과 나이에 각각 작은따옴표/큰따옴표를 추가하여 문자열 형식임을 강조하고, 학교에는 작은따옴표/큰따옴표를 추가하지 않습니다. 객체의 속성을 탐색하여 유형을 확인합니다. school도 암시적으로 String 유형으로 변환되는 것으로 나타났습니다.
배열의 인덱스는 실제로 문자열 유형입니다. 놀랍지만 사실입니다. 예를 들어
var ary = [1, 3,5,7 ];
for(var a in ary){
Alert(a ": " typeof a)
3. 경고 중에 존재
var a = 'hello'
alert(typeof a.fn());
alert(a.fn()); //-->안녕하세요
이를 반환하는 fn 메서드를 String 프로토타입에 추가합니다. 이는 객체이므로 typeof a.fn()은 당연히 객체를 반환합니다.
핵심은 마지막 경고(a.fn())입니다. a.fn()이 반환하는 것은 분명히 객체이지만 표시를 위해 암시적으로 "hello" 문자열로 변환됩니다.
Number.prototype.fn = function(){return this};
var a = 10>alert(typeof a.fn());//-->object
alert (a.fn()); //-->10
a.fn()은 객체 유형을 반환하지만, Alert(a.fn())이 다음으로 변환될 때 암시적으로 변환됩니다. 숫자.