ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript 演算子の関係演算子の解析

JavaScript 演算子の関係演算子の解析

怪我咯
怪我咯オリジナル
2017-03-31 09:53:482031ブラウズ

Directory

[1] 同一性 [2] 等しい [3] より大きい [4] より小さい

前の単語

関係性 演算子 は、2 つの値間の関係をテストするために使用され、関係が存在するかどうかに応じて true または false を返します。関係 は、通常は ifwhile で常にブール値を返します。関係式は、プログラムの実行フローを制御するために、 または for ステートメント で使用されます

javascript は、===、!==、==、!=、<、<=、>、> を提供します;=8 の関係演算子、この記事では 4 つのカテゴリに分けて関係演算子を紹介します

恒等演算子

恒等演算子「===」は厳密等価演算子とも呼ばれ、最初にその演算を計算します数値の値, そして 2 つの値を比較します。比較プロセスには 型変換 はありません。比較プロセスは次のとおりです:

【1】2 つの値の型が同じでない場合、false

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

【2】 2つの値の場合 それぞれの値がUnknown、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

[注意] 関係なく、どの基数の数値も、リレーショナル比較を行うときに計算のために最終的に10進数に変換されます

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


Number型には、NaN(数値ではない)という特別な値があり、これは異なります任意の値からの等価性; さらに、Number 型には +0 と -0 があり、それらの符号は異なりますが、値は等しいです

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


2 つの同一の string 値は次のように動作します。同じ長さ、同じ文字は同じ位置に対応します

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


【3】2つの値参照が同じオブジェクトの場合はtrueを返し、それ以外の場合はfalseを返します

【注意】より詳細な説明は、javascript オブジェクト の比較は値の比較ではなく参照であるということです。2 つの異なるオブジェクトが同じ数のプロパティを持っている場合、オブジェクトはそれ自体と等しくなりますが、他のオブジェクトとは等しくありません。同じプロパティ名と値であっても、等価ではありません

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

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

【恒等不等演算子】


恒等演算子(!==)は、厳密な等価演算子とも呼ばれます。オペランドの値が恒等演算子と同じである場合、'===' の比較結果が true の場合、'!==' の比較結果は false になります。が false の場合、'!==' の比較結果は true


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

等価演算子

等価演算子 '==' は恒等演算子と似ていますが、等価演算子の比較は厳密ではありません。 2 つのオペランドが同じ型ではない場合、等価演算子は型変換を実行してから比較を試みます

2 つのオペランドの型が同じ場合、比較規則と恒等演算子の規則は同じです


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

2 つのオペランドの型が異なる場合、等価演算子 '== ' は次の規則に従います:


【1】一方の値がオブジェクト型で、もう一方の値がプリミティブ型の場合、オブジェクト型は最初にvalueOf()を使用してプリミティブ値に変換します。結果がプリミティブ値でない場合は、toString()メソッドを使用して変換してから比較します

【注意】dateクラスではtoString()メソッドのみ変換可能です。文字列に。同様に、時刻
Date
オブジェクトは、加算演算を実行するときに toString() を使用して文字列に変換されますが、減算、乗算、除算、剰余などの他の数学演算では、Number() 関数を使用して を変換します。 function valueOf()を使って時刻Dateオブジェクトを数値に変換します 【2】オブジェクトを元の値に変換した後、オペランドが両方とも文字列の場合は文字列を比較します


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

【3】In After object はプリミティブ値に変換されます。少なくとも 1 つのオペランドが文字列でない場合、数値比較のために両方のオペランドが 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

[Note] If If一方の値が 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字符的索引顺序

JavaScript 演算子の関係演算子の解析

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

以上がJavaScript 演算子の関係演算子の解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。