>웹 프론트엔드 >JS 튜토리얼 >자바스크립트 연산자의 관계 연산자 구문 분석

자바스크립트 연산자의 관계 연산자 구문 분석

怪我咯
怪我咯원래의
2017-03-31 09:53:482054검색

내용

[1] 동일성 [2] 같음 [3] 초과 [4] 미만

이전 단어

관계 연산자 는 다음과 같이 두 값 사이의 관계를 테스트하는 데 사용됩니다. 관계 관계 표현식 은 일반적으로 if, while 또는 for 문 에서 항상 부울 값을 반환합니다. 관계식은 프로그램의 실행 흐름을 제어하는 ​​데 사용됩니다.

 javascript는 ===, !==, ==, !=, <, <=, > ;, > = 8개의 관계 연산자, 이 글은 관계 연산자를 소개하기 위해 4개의 카테고리로 나누어 설명합니다

식별 연산자

식별 연산자 '== =' 엄격한 항등 연산자는 먼저 피연산자의 값을 계산한 다음 두 값을 비교합니다. 비교 프로세스에는 유형 변환이 ​​없습니다. 비교 프로세스는 다음과 같습니다.

 [ 1 ]두 값이 서로 다른 타입이면 false를 반환

console.log(1 === '1');//false
console.log(1 === [1]);//false

 【2]두 값이 모두 Undefine이면 Null, Boolean, Number, String 동일한 기본형의 값이 같으면 true를 반환하고, 그렇지 않으면 false를 반환

console.log(undefined === undefined);//true
console.log(null === null);//true


console.log(true === true);//true
console.log(false === false);//true


console.log(1 === 1);//true
console.log(2.5 === 2.5);//true

[참고] 숫자가 어떤 진수에 관계없이 관계 비교를 수행하면 결국 소수로 변환되어 계산됩니다.

console.log(10 === 0xa);//true


숫자 형식에서는 NaN(숫자가 아님)이라는 특별한 값이 있으며 어떤 값과도 같지 않습니다. 또한 Number 유형에는 +0과 -0이 있지만 부호는 다르지만 값은 같습니다.

console.log(NaN === NaN);//false
console.log(+0 === -0);//true


동일한 문자열 값은 다음과 같이 표현됩니다. 동일한 길이와 동일한 위치에 해당하는 동일한 문자

console.log('abc' === 'abc');//true
console.log('abc' === 'acb');//false


 【3】두 개의 값 ​​​​ 이 동일한 객체 를 참조하는 경우 true를 반환하고, 그렇지 않으면 false를 반환합니다.

[참고] 더 자세한 설명은 자바스크립트 객체의 비교는 값의 비교가 아닌 참조라는 것입니다. 객체는 그 자체와 같지만 다른 객체와는 동일하지 않습니다. 속성 개수 , 동일한 속성 이름 및 값, 여전히 동일하지 않음

console.log([] === []);//false
console.log({} === {});//false    
console.log(function(){} === function(){});//false


var a = {};
b = a;
console.log(a === b);//true


【Identity 부등 연산자】

항등 부등 연산자(!==)는 완전 부등 연산자라고도 하며, 피연산자의 비교 과정은 항등 연산자와 동일하며 결과가 부정됩니다. '==='의 비교 결과가 true이면 '!=='의 비교 결과는 false이고, '==='의 비교 결과가 false이면 '!=='의 비교 결과는 다음과 같습니다. true

console.log(1 !== '1');//true
console.log(1 !== 1);//false
console.log(true !== false);//true
console.log({} !== {});//true

항등 연산자

항등 연산자 '=='는 항등 연산자와 유사하지만 둘을 비교하면 항등 연산자의 비교가 엄격하지 않습니다. 피연산자가 동일한 유형이 아닌 경우 항등 연산자는 비교하기 전에 일부 유형 변환을 시도합니다

두 피연산자 유형이 동일한 경우 비교 규칙은 항등 연산자 규칙과 동일합니다

console.log(undefined == undefined);//true
console.log(10 == 0xa);//true
console.log(NaN == NaN);//false
console.log([] == []);//false


두 피연산자 유형이 다른 경우 등호 연산자 '=='는 다음 규칙을 따릅니다.

[1] 한 값이 객체 유형이고 다른 값은 원시 유형이므로 먼저 valueOf()를 사용하여 객체 유형을 원래 값으로 변환합니다. 결과가 원래 값이 아닌 경우 toString() 메서드를 사용하여 변환한 후 비교합니다

[참고] Date 클래스에서는 toString() 메서드를 사용하여 문자열로 변환하는 것만 허용합니다. 마찬가지로 TimeDate 객체를 추가할 때는 toString()을 사용하여 문자열로 변환하고, 빼기, 곱하기, 나누기, 나머지 등을 포함한 다른 수학 연산에서는 Number()를 사용합니다. 함수 는 valueOf()를 사용하여 시간 Date 객체를 숫자로 변환합니다.

[2] 객체를 원래 값으로 변환한 후 두 피연산자가 모두 문자열이면 문자열 비교로 진행합니다.

console.log(new Date() == 'Sat Jun 25 2016 11:07:20 GMT+0800 (中国标准时间)');//true


[3] 객체가 기본 값으로 변환된 후 하나 이상의 피연산자가 문자열이 아닌 경우 두 피연산자 모두 Number()를 통해 전달됩니다. 함수를 숫자로 변환하여 수치 비교

console.log(true == 1);//true
console.log(true == 0);//false
console.log(false == '1');//false
console.log(false == '0');//true
console.log(true == 'true');//false,相当于1 == NaN

console.log([1] == 1);//true,相当于1 == 1
console.log([1] == '1');//true,相当于'1' == '1'
console.log([] == 0);//true,相当于0 == 0
console.log([] == '0');//false,相当于'' == '0'

console.log([] == true);//false,相当于0 == 1
console.log([1] == true);//true,相当于1 == 1


var a = {
    valueOf:function(){
        return 1;
    },
    toString:function(){
        return '2';
    }
} 
console.log( a == '1');//true,相当于1 == 1

var a = {
    valueOf:function(){
        return {};
    },
    toString:function(){
        return '1';
    }
} 
console.log( a == 1);//true,相当于1 == 1


[참고] 한 값이 null이고 다른 값이 정의되지 않은 경우 그런 다음 true를 반환합니다. Number(null)는 0이지만 null과 0은 같지 않습니다

console.log(null == undefined);//true
console.log(null == 0);//false


 [참고] 빈 문자열이나 공백 문자열은 0으로 변환됩니다

console.log(null == []);//false
console.log(null == '');//false
console.log([] == ' ');//false,相当于'' == ' '
console.log([] == '');//true,相当于'' == ''
console.log(0 == '');//true


【不相等运算符】

  不相等运算符(!=)的操作数比较过程与相等运算符相同,结果取反。如果'=='的比较结果是true,则'!='的比较结果是false;如果'=='的比较结果是false,则'!='的比较结果是true

console.log(1 != '1');//false,相当于1 != 1
console.log(true != '1');//false,相当于1 != 1
console.log('true' != 1);//true,相当于NaN != 1
console.log([1] != '1');//false,相当于'1' != '1'
console.log([1] != true);//false,相当于1 != 1


大于运算符

  大于运算符(>)用于比较两个操作数,如果第一个操作数大于第二个操作数,则大于运算符的计算结果为true,否则为false

  大于运算符的操作数可能是任意类型,然而,只有数字和字符串才能真正执行比较操作,因此那些不是数字和字符串的操作数都将进行类型转换,类型转换规则如下:

  【1】如果操作数是对象,则这个对象将先使用valueOf()转换成原始值,如果结果还不是原始值,则再使用toString()方法转换

  [注意]实际上,在原生对象中,使用valueOf()方法转换为原始值的,只有转换为数字Number类型的时间Date对象,其他对象都通过toString()方法成了字符串

  【2】在对象转换为原始值之后,如果两个操作数都是字符串,则按照字母表的顺序对两个字符串进行比较,这里提到的字母表顺序是指组成这个字符串的16位unicode字符的索引顺序

자바스크립트 연산자의 관계 연산자 구문 분석

console.log('b' > 'a');//true
console.log('B' > 'a');//false

console.log({} > '[a]');//true,相当于'[object Object]' > '[a]'
console.log({} > '[p]');//false,相当于'[object Object]' > '[p]'

console.log([a] > [b]);//false,相当于'[a]' > '[b]'
console.log([2] > [11]);//true,相当于'[2]' > '[11]'


  [注意]虽然在字母表中大写字母在小写字母的前面,所以大写字母 < 小写字母;但字符串String对象有一个字符串比较的方法localeCompare()方法会考虑自然语言的排序情况,把'B'排在'a'的后面,该方法在字符串在字母表中排在其参数之前时,返回一个负数;字符串在字母表中排在其参数之后时,返回一个正数

console.log(&#39;B&#39;.localeCompare(&#39;a&#39;));//1
console.log(&#39;B&#39; > 'a');//false
console.log('b'.localeCompare('a'));//1
console.log('b' > 'a');//true</p>
<p><br>  【3】在对象转换为原始值之后,如果至少有一个操作数不是字符串,则两个操作数都转换成数字进行比较<br><br>  [注意]在等于<a href="http://www.php.cn/wiki/996.html" target="_blank">操作符</a>中,时间Date()对象只允许通过toString()方法转换为字符串,而不允许通过valueOf()方法转换为数字;而在大于操作符中,时间Date()对象允许优先使用valueOf()方法转换为数字 <br><br></p>
<pre class="brush:php;toolbar:false">console.log(new Date() > 100);//true,相当于1466826928667 > 100
console.log(true > [0]);//true,相当于 1 > 0

console.log(2 > 1);//true
console.log(11 > '2');//true,相当于11 > 2

console.log(NaN > 1);//false
console.log(1 > NaN);//false
console.log({} > true);//false,相当于 NaN > 1


  [注意]虽然null == 0的结果为false,这是因为javascript将null == undefined的结果设为true。在大于运算中,null和undefined进行Number()转型函数转换分别转换为0和NaN

console.log(undefined > -1);//false,相当于NaN > -1
console.log(null > -1);//true,相当于0 > -1
console.log(undefined > 0);//false,相当于NaN > 0
console.log(null > 0);//false,相当于0 > 0


  对于数字和字符串来说,加号运算符和比较运算符行为有所不同,加号运算符更偏爱字符串,如果它的一个操作数是字符串,就进行字符串连接。而比较运算符则更偏爱数字,只有在两个操作数都是字符串时,才进行字符串的比较

console.log(1 + 2);//3
console.log('1' + '2');//'12'
console.log('1' + 2);//'12',相当于 '1' + '2'

console.log(2 > 1);//true
console.log('2' > '1');//true
console.log('2' > 1);//true,相当于 2 > 1


【小于等于运算符】

  小于等于运算符(<=)并不依赖于小于或等于运算符的比较规则,而是遵循大于运算符的比较规则,结果取反。如果'>'的比较结果是true,则'<='的比较结果是false;如果'>'的比较结果是false,则'<='的比较结果是true

console.log(1 <= &#39;0&#39;);//false,相当于1 <= 0
console.log(true <= &#39;0&#39;);//false,相当于1 <= 0
console.log(&#39;true&#39; <= 0);//false,相当于NaN <= 0
console.log([1] <= &#39;0&#39;);//false,相当于&#39;1&#39; <= &#39;0&#39;
console.log([0] <= true);//true,相当于0 <= 1
console.log(1 <= 1);//true


小于运算符

  小于运算符(<)用于比较两个操作数,如果第一个操作数小于第二个操作数,则小于运算符的计算结果为true,否则为false

  小于运算符与大于运算符的类型转换规则类似,就不再赘述

【大于等于运算符】

  同样地,大于等于运算符(>=)并不依赖于大于或等于运算符的比较规则,而是遵循小于运算符的比较规则,结果取反。如果'<'的比较结果是true,则'>='的结果是false;如果'<'的比较结果是false,则'>='的结果是true

위 내용은 자바스크립트 연산자의 관계 연산자 구문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.