이 기사에서는 JavaScript의 비교 연산자의 암시적 유형 변환에 대해 소개합니다(예제 포함). 필요한 친구가 참고할 수 있기를 바랍니다.
코드에서 '==' 및 '==='를 자주 볼 것이라고 생각합니다. 그런데 비교 연산자와 암시적 변환을 실제로 이해하셨나요? 오늘 비교 연산자를 다시 이해해 볼까요?
일치 연산자====
설명: 엄격한 일치, 유형 변환 없음, 데이터 유형과 값이 정확히 동일해야 합니다.
先判断类型,如果类型不是同一类型的话直接为false; 1 对于基本数据类型(值类型): Number,String,Boolean,Null和Undefined:两边的值要一致,才相等 console.log(null === null) // true console.log(undefined === undefined) // true 注意: NaN: 不会等于任何数,包括它自己 console.log(NaN === NaN) // false 2 对于复杂数据类型(引用类型): Object,Array,Function等:两边的引用地址如果一致的话,是相等的 arr1 = [1,2,3]; arr2 = arr1; console.log(arr1 === arr2) // true
동등 연산자==
비엄격 일치: 유형 변환은 가능하지만 전제 조건 총 5가지 조건이 있습니다
(다음 코드에서는 x == y를 예로 사용합니다)
x와 y는 모두 null이거나 정의되지 않습니다.
규칙: 암시적 유형 변환이 없으며 무조건 true를 반환합니다.
console.log ( null == undefined );//true console.log ( null == null );//true console.log ( undefined == undefined );//true
x 또는 y is NaN: NaN은 어떤 숫자와도 같지 않습니다
규칙: 암시적 유형 변환이 없으며 무조건 false를 반환합니다
console.log ( NaN == NaN );//false
x 및 y는 문자열, 부울, 숫자
규칙: 암시적 유형 변환이 있는 경우 숫자가 아닌 데이터 유형이 변환됩니다. number
console.log ( 1 == true );//true (1) 1 == Number(true) console.log ( 1 == "true" );//false (1) 1 == Number('true') console.log ( 1 == ! "true" );//false (1) 1 == !Boolean('true') (2) 1 == !true (3) 1 == false (4)1 == Number(false) console.log ( 0 == ! "true" );//true console.log(true == 'true') // false
x로 변환 또는 y는 복합 데이터 유형입니다: 복합 데이터 유형의 원래 값을 먼저 얻은 다음 왼쪽과 비교합니다
복합 데이터 유형의 원래 값: 먼저 valueOf 메서드를 호출한 다음 toString 메서드를 호출합니다.
valueOf: 일반적으로 기본적으로 반환됩니다. Self
Array toString: 기본적으로 조인 메서드가 호출되어 각 요소를 연결하고 연결된 문자열이 반환됩니다.
console.log ( [].toString () );//空字符串 console.log ( {}.toString () );//[object Object] 注意: 空数组的toString()方法会得到空字符串, 而空对象的toString()方法会得到字符串[object Object] (注意第一个小写o,第二个大写O哟) console.log ( [ 1, 2, 3 ].valueOf().toString());//‘1,2,3’ console.log ( [ 1, 2, 3 ] == "1,2,3" );//true (1)[1,2,3].toString() == '1,2,3' (2)'1,2,3' == '1,2,3' console.log({} == '[object Object]');//true
x와 y는 둘 다입니다. 복잡한 데이터 유형:
규칙은 주소만 비교합니다. 주소가 일치하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
var arr1 = [10,20,30]; var arr2 = [10,20,30]; var arr3 = arr1;//将arr1的地址拷贝给arr3 console.log ( arr1 == arr2 );//虽然arr1与arr2中的数据是一样,但是它们两个不同的地址 console.log ( arr3 == arr1 );//true 两者地址是一样 console.log ( [] == [] );//false console.log ( {} == {} );//false
전형적인 인터뷰 질문
注意:八种情况转boolean得到false: 0 -0 NaN undefined null '' false document.all() console.log([] == 0); //true // 分析:(1) [].valueOf().toString() == 0 (2) Number('') == 0 (3) false == 0 (4) 0 == 0 console.log(![] == 0); //true // 分析: 逻辑非优先级高于关系运算符 ![] = false (空数组转布尔值得到true) console.log([] == []); //false // [] 与右边逻辑非表达式结果比较 //(1) [] == !Boolean([]) (2) [] == !true (3)[] == false (4) [].toString() == false (5)'' == false (6)Number('0') == Number(false) console.log([] == ![]); //true onsole.log({} == {}); //false // {} 与右边逻辑非表达式结果比较 //(1){} == !{} (2){} == !true (3){} == false (4){}.toString() == false (5)'[object Object]' == false (6)Number('[object Object]') == false console.log({} == !{}); //false
비정상적인 인터뷰 질문
var a = ??? if(a == 1 && a == 2 && a == 3 ){ console.log(1) } //如何完善a,使其正确打印1 //答案 var a = { i : 0, //声明一个属性i valueOf:function ( ) { return ++a.i; //每调用一次,让对象a的i属性自增一次并且返回 } } if (a == 1 && a == 2 && a == 3){ //每一次运算时都会调用一次a的valueOf()方法 console.log ( "1" ); }
이 기사는 여기서 끝났습니다. 콘텐츠를 보려면 PHP 중국어 웹사이트의 JavaScript Video Tutorial 칼럼을 주목하세요!
위 내용은 JavaScript에서 비교 연산자의 암시적 유형 변환 소개(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!