JavaScript의 암시적 유형 변환에 대한 간략한 토론

黄舟
풀어 주다: 2017-03-15 14:53:24
원래의
1460명이 탐색했습니다.

JavaScript 데이터 유형 null, undefine, boolean, string, number, 물체. object는 참조 유형이고 의 나머지 5개 유형은 기본 유형 또는 기본 유형입니다. typeof 메소드를 사용하면 어떤 유형이 속하는지 출력할 수 있습니다. 서로 다른 유형의 변수를 비교하려면 먼저 유형을 변환해야 하는데, 이를 유형 변환이라고 합니다. 암시적 변환은 일반적으로 연산자 덧셈, 뺄셈, 곱셈, 나눗셈, 같음, 작음, 큼 등을 사용하여 발생합니다. .

typeof '11'  //string       
typeof(11)  //number
&#39;11&#39; < 4     //false
로그인 후 복사

기본 유형의 변환

덧셈, 뺄셈, 곱셈, 나눗셈에 대해 먼저 이야기해 보겠습니다.

1.

String 숫자를 추가하면 숫자가 문자열로 변환됩니다.

2. 숫자에서 문자열을 빼고 문자열을 숫자로 변환합니다. 문자열이 순수 숫자가 아닌 경우 NaN으로 변환됩니다. 문자열에서 숫자를 뺀 경우에도 마찬가지입니다. 두 문자열을 빼면 먼저 숫자로 변환됩니다.

3. 곱셈, 나눗셈, 보다 큼, 보다 작음, 뺄셈의 변환에도 동일하게 적용됩니다.

//隐式转换 + - * == / 
// + 
10 + &#39;20&#39;    //2010
// -
10 - &#39;20&#39;    //-10
10 - &#39;one&#39;   //NaN
10 - &#39;100a&#39;  //NaN
// *
10*&#39;20&#39;      //200
&#39;10&#39;*&#39;20&#39;    //200
// /
20/&#39;10&#39;      //2
&#39;20&#39;/&#39;10&#39;    //2
&#39;20&#39;/&#39;one&#39;  //NaN
로그인 후 복사

다른 == 세트를 살펴보겠습니다.

1. undefine은 null과 같습니다

2. 문자열과 숫자를 비교할 때는 문자열을 숫자로 변환합니다

3 숫자를 불리언으로 비교할 때는 Boolean을 숫자로 변환합니다

4. 문자열과 부울을 비교할 때 둘을 숫자로 변환하세요

// ==
undefined == null;    //true
&#39;0&#39; == 0;            //true,字符串转数字
0 == false;           //true,布尔转数字
&#39;0&#39; == false;       //true,两者转数字
null == false;       //false
undefined == false;  //false
로그인 후 복사

참조 유형 변환

기본 유형 간의 비교는 비교적 간단합니다. 참조 유형과 기본 유형의 비교는 상대적으로 복잡합니다. 먼저 참조 유형을 기본 유형으로 변환한 후 위의 방법에 따라 비교해야 합니다. 부울로 변환된 참조 유형은 모두 true입니다. 예를 들어 빈

배열객체인 한 참조 유형이므로 []는 true입니다. 참조 유형을 숫자나 문자열로 변환하려면 valueOf() 또는 toString()을 사용하세요. 객체 자체는 valueOf() 및 toString()을 상속하며, valueOf() 및 toString( ). 객체에 따라 상속된 valueOf()를 사용하여 문자열, 숫자 또는 그 자체로 변환하고, 객체는 toString을 사용하여 문자열로 변환해야 합니다. 일반 객체는 기본적으로 valueOf()를 호출합니다. 1. 객체를 숫자로 변환할 때는 valueOf()를 호출합니다.

2. 객체를 문자열로 변환할 때는 toString()을 호출합니다.

먼저 살펴보세요. 다음 예에서는

0 == [];        // true, 0 == [].valueOf(); -> 0 == 0;
&#39;0&#39; == [];      // false, &#39;0&#39; == [].toString(); -> &#39;0&#39; == &#39;&#39;;
2 == [&#39;2&#39;];     // true, 2 == [&#39;2&#39;].valueOf(); -> 2 == &#39;2&#39; -> 2 == 2;
&#39;2&#39; == [2];     // true, &#39;2&#39; == [2].toString(); -> &#39;2&#39; ==&#39;2&#39;;

[] == ![];      //true, [].valueOf() == !Boolean([]) -> 0 == false -> 0 == 0;
로그인 후 복사

객체를 숫자로 변환할 때 valueOf()가 호출되고 그 전에 toString()이 호출되므로 valueOf 메서드는 다음과 같습니다. 따라서 위의 예 0 == []는 보다 합리적인 다음과 같이 변경되어야 합니다. 어쨌든 []는 결국 0으로 변환됩니다.

var valueOf = function (){
    var str = this.toString();    //先调用toString(),转成字符串
    //...
}
0 == [];        // true, 0 == [].valueOf(); -> 0 == &#39;0&#39; -> 0 == 0;
로그인 후 복사

사용자 정의된 valueOf() 및 toString();

1. 사용자 정의된 valueOf()와 toString()이 모두 존재하며 기본적으로 valueOf()가 호출됩니다.

2. toString()만 있는 경우 toString()을 호출합니다.

var a = [1];

a.valueOf = function (){ return 1;}
a.toString = function (){ return &#39;1&#39;;}

a + 1;         // 2, valueOf()先调用
로그인 후 복사

valueOf()를 제거하면 toString()이 호출됩니다.

rree

다른 것을 반품하면 어떻게 되나요?

var a = [1];

a.valueOf = function (){ return 1;}
a.toString = function (){ return &#39;1&#39;;}

a + 1;         // 2, 先调用valueOf()
//去掉valueOf
delete a.valueOf;
a + 1;        // &#39;11&#39;, 调用toString()
로그인 후 복사

다른 객체는 valueOf()를 호출하여 다른 유형으로 변환합니다.

var a = [1];

a.valueOf = function (){return ;}
a.toString = function (){return 1 ;};

1 - a;        //NaN
로그인 후 복사

참조 유형 간의 비교는 메모리 주소 비교이므로 암시적 변환은 필요하지 않습니다. 여기에 자세히 설명되어 있습니다.

var a = {};
a.valueOf();    //Object {}
var a = [];
a.valueOf();    //[]    自己本身
var a = new Date();
a.valueOf();    //1423812036234  数字
var a = new RegExp();
a.valueOf();    //    /(?:)/  正则对象
로그인 후 복사

명시적 변환

명시적 변환은 비교적 간단하며 직접 변환하는 방법으로 클래스를 직접 사용할 수 있습니다.

아아아아

더 쉬운 변환 방법이 있습니다.

아아아아

위 내용은 JavaScript의 암시적 유형 변환에 대한 간략한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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