javascriptの比較演算と論理演算
17168 ワード
1、はい == 演算中、undefined == null ,このほかに、この2 このデータは他のデータと同じではありません. 、 number 、を選択します bollanの間で比較すると、2つの数値のタイプが違っていれば、number型ではなくnumber型に変換できます. Number()、not parseFlaoat()を比較します. js. のスカラ(ここでは「スカラ」の不正確かつ責任な表現とは、bootlean、string、numberのことです.これも間違いなく、trueを1として、falseを0として、残りの一つは文字列です.例えば、「true」==true、 「true」をブーメランにしても、trueをstringにしても、正しい結果が得られず、彼らをnumberに変えて比較すれば、正しい結果が得られます.
3、対象型データ(String、Number、Boolean、object、Aray、function とストリングス 、number 、bollanタイプは、valueOf()、toString()方法の戻り値を使って比較に参加します.対象とオブジェクトはタイプが違う限りfalseです.valueOf()やtoString()は呼び出しません.事実上、どの対象型のデータも自分だけです.4、NaNはnumber型です.データと同じではなく、彼自身も含まれます.NaN==true,isNaN==true
5、Infinity まずnumber型です.そして、Infinity. Infinityに等しいだけです 6、if文の表現の位置の特殊性に注意して、比較演算と論理演算を混同しないでください.論理演算もブール演算(演算元の前に加算しないでください. ! )論理要素計算は常に演算元に戻り、演算とブール演算は常にtrue/falseに戻ります. if ステートメントの条件式には、ブール演算の効果が隠れています. 式の演算結果を レスリング 実行 !!レスリング 手に入れる true/false .
7、論理演算において、falseと判断されたデータは、false、null、undefined、空の文字列、0、NaN、残りのデータはすべてtrueであり、どの対象型データもすべてtrueであり、Booleanオブジェクト自体を含む.論理演算において、 && 優先順位 ||,比較:
8、===演算では、まずタイプを比較してから数値を比較します.
9、switch-caseでは、caseパラメータは区分タイプです.
10、大きい、小さい(>=>=>==、
再配列:
より権威のある文書はここを見ます.
http://bclary.com/2004/11/07/#a-11.8.5
undefinedはキーワードではなく、非グローバル環境でundefinedを再定義できます.
タイプ変換について:
対象型データで比較演算と算術演算(+、-、*、% など)の場合、対象型データを用いたvalueOf()メソッドの戻り値が演算に参加し、スカラーオブジェクトと時間オブジェクトのvalueOf()の戻り値がスカラーであり、他のオブジェクトの戻り値がすべてobject/function型であり、valueOf()がスカラーを得られない場合は引き続きtoring(String)メソッドを呼び出します.の戻り値が演算に参加していますが、この2つの方法のいずれもスカラー(またはundefined、null)でない場合、プログラムはエラーとなります.
日付オブジェクトはここで他のオブジェクトとはちょっと違って、日付オブジェクトが参加します. 「+」と「=」演算は文字列と直接に解釈され、valueOf()をスキップしてstringに戻ります.スカラが得られない場合はvalueOf()を試し続けますが、Dateオブジェクトは乗算に参加しますか?それともvalueOfを呼び出してデジタル演算に参加しますか?これは日付の実用的な意味から考えるかもしれません.日付データは主に読書に使います.
文字列をインターフェイスで出力するときは、直接呼び出します. toString 方法、例えば alert(x) document.write(x)は、toString()がスカラでない場合は、valueOf()を試してみますが、スカラが取れない場合はエラーが発生します.
このような場合、パラメータ位置の配列は、PArseInt()関数(parseFlooat()と上記のインターフェース出力関数を含む)の実現形態によって、受信したいパラメータタイプがstringであり、パラメータのデータタイプ自体の自動変換ではないため、Tostring()を直接呼び出す.
いくつかのテスト:
//toStringの呼び出し
によって Number(undefined)==NaN , Number(null)==0 ,したがって undefined 参加するデジタル演算はNaNを得ますが、nullは数字0として演算に参加します.
前 ++ 和後++ 演算は単目演算です.演算元はnumber型に変換して演算に参加します.'a'++ 和 ++'a. NaNはNumber('a')=NaNを得ることができます.
+を単眼演算子とすると、「正を取る」と表します. alert(+'a') //NaN ,alert(typeof(+'1') //number
Number() 関数は、8進数の書式の文字列を10進数で処理し、先頭の0を削除します.
parseInt 文字列を10進数の整数に変換すると、2進数を受け取ることができます. つのパラメータ、二つ目のパラメータは、入力された文字列の進数を説明するために使用されます.
parseInt('abc',16) // 2748 ,16進数を返します abc 10進数に変換
対応する、number オブジェクトのtoString 方法は、1つのパラメータ表示をどの進法で文字列に変換してもよいです.
(2748).toString(16) //abc
Object スカラー Number 、String 、Boolean及び Date のコンストラクタが違います.
もし OB オブジェクトであれば、
OB === new Object(obj) === Object(obj)
Number 、String 、Boolean、 Date コンストラクタはnewごとに新しいオブジェクトを返します.newを使わないと新しいオブジェクトのvalueOfの値を返します.
転載先:https://www.cnblogs.com/ecalf/archive/2012/11/29/2793921.html
3、対象型データ(String、Number、Boolean、object、Aray、function とストリングス 、number 、bollanタイプは、valueOf()、toString()方法の戻り値を使って比較に参加します.対象とオブジェクトはタイプが違う限りfalseです.valueOf()やtoString()は呼び出しません.事実上、どの対象型のデータも自分だけです.4、NaNはnumber型です.データと同じではなく、彼自身も含まれます.NaN==true,isNaN==true
5、Infinity まずnumber型です.そして、Infinity. Infinityに等しいだけです 6、if文の表現の位置の特殊性に注意して、比較演算と論理演算を混同しないでください.論理演算もブール演算(演算元の前に加算しないでください. ! )論理要素計算は常に演算元に戻り、演算とブール演算は常にtrue/falseに戻ります. if ステートメントの条件式には、ブール演算の効果が隠れています. 式の演算結果を レスリング 実行 !!レスリング 手に入れる true/false .
7、論理演算において、falseと判断されたデータは、false、null、undefined、空の文字列、0、NaN、残りのデータはすべてtrueであり、どの対象型データもすべてtrueであり、Booleanオブジェクト自体を含む.論理演算において、 && 優先順位 ||,比較:
3 || 0 && 2 ; //3 , 3||(0&&2)
(3 || 0 ) && 2 ; //2
8、===演算では、まずタイプを比較してから数値を比較します.
9、switch-caseでは、caseパラメータは区分タイプです.
10、大きい、小さい(>=>=>==、
null<=0; //true
null>=0; //true
null>0; //false
null<0;//false
null==0;//false
undefined==null //true
undefined<=null //false
undefined>=null //false
再配列:
[1]==[1]; //false
[1]>=[1]; //true, Number([1].valueOf().toString())==1
より権威のある文書はここを見ます.
http://bclary.com/2004/11/07/#a-11.8.5
undefinedはキーワードではなく、非グローバル環境でundefinedを再定義できます.
//test1
var undefined = 1;
console.log('test1',undefined,typeof undefined); // , undefined
//test2
(function(){
undefined = 2; // undefined
console.log('test2',undefined,typeof undefined);
})();
//test3
(function(){
var undefined = 3; //undefined
console.log('test3',undefined,typeof undefined);
})();
//test4
(function(x,undefined) { // undefined
console.log('test4',undefined,typeof undefined,arguments)
console.log(undefined*2) // 8
}('a',4))
タイプ変換について:
対象型データで比較演算と算術演算(+、-、*、% など)の場合、対象型データを用いたvalueOf()メソッドの戻り値が演算に参加し、スカラーオブジェクトと時間オブジェクトのvalueOf()の戻り値がスカラーであり、他のオブジェクトの戻り値がすべてobject/function型であり、valueOf()がスカラーを得られない場合は引き続きtoring(String)メソッドを呼び出します.の戻り値が演算に参加していますが、この2つの方法のいずれもスカラー(またはundefined、null)でない場合、プログラムはエラーとなります.
日付オブジェクトはここで他のオブジェクトとはちょっと違って、日付オブジェクトが参加します. 「+」と「=」演算は文字列と直接に解釈され、valueOf()をスキップしてstringに戻ります.スカラが得られない場合はvalueOf()を試し続けますが、Dateオブジェクトは乗算に参加しますか?それともvalueOfを呼び出してデジタル演算に参加しますか?これは日付の実用的な意味から考えるかもしれません.日付データは主に読書に使います.
文字列をインターフェイスで出力するときは、直接呼び出します. toString 方法、例えば alert(x) document.write(x)は、toString()がスカラでない場合は、valueOf()を試してみますが、スカラが取れない場合はエラーが発生します.
このような場合、パラメータ位置の配列は、PArseInt()関数(parseFlooat()と上記のインターフェース出力関数を含む)の実現形態によって、受信したいパラメータタイプがstringであり、パラメータのデータタイプ自体の自動変換ではないため、Tostring()を直接呼び出す.
いくつかのテスト:
//Array
var _arrToString = Array.prototype.toString;
var _arrVal = Array.prototype.valueOf;
Array.prototype.toString=function(){
console.log("Array.toString is called");
return _arrToString.call(this);
};
Array.prototype.valueOf=function(){
console.log("Array.valueOf is called");
return _arrVal.call(this);
};
[1]+2 //Array.valueOf is called , Array.toString is called
parseInt([1]) //parseInt string , Array.toString
Number([1]) //valueof toString
//Boolean
var _arrToString = Boolean.prototype.toString;
var _arrVal = Boolean.prototype.valueOf;
Boolean.prototype.toString=function(){
console.log("Boolean.toString is called");
return _arrToString.call(this);
};
Boolean.prototype.valueOf=function(){
console.log("Boolean.valueOf is called");
return _arrVal.call(this);
};
1+new Boolean(true); //Boolean.valueOf is called
//object
var tostr = Object.prototype.toString;
var valof = Object.prototype.valueOf;
Object.prototype.toString = function(){
console.log('Object.toString iscalled');
return tostr.call(this);
}
Object.prototype.valueOf = function(){
console.log('Object.valueOf is called');
return valof.call(this);
}
({})== 1; // valueOf toString
({})== ({}); // valueOf toString
//Date
var valueof = Date.prototype.valueOf;
var toString = Date.prototype.toString;
Date.prototype.valueOf = function(){
console.log('valueof is called');
return valueof.call(this);
}
Date.prototype.toString = function(){
console.log('toString is called');
return toString.call(this);
}
new Date()+1; //toString is called
new Date()*1; //valueOf is called
new Date()==1;//toString is called
new Date()>=1;//valueOf is called
parseInt( new Date()); //toString is called
Number( new Date()); //valueOf is called
//toStringの呼び出し
var tostr = Array.prototype.toString;
var valof = Array.prototype.valueOf;
Array.prototype.toString = function(){ console.log('Array.toString iscalled'); return tostr.call(this); }
Array.prototype.valueOf = function(){ console.log('Array.valueOf is called'); return valof.call(this); }
var arr = [2];
alert(arr); //Array.toString iscalled
var x = arr +1; //Array.valueOf is called ,Array.toString is called
によって Number(undefined)==NaN , Number(null)==0 ,したがって undefined 参加するデジタル演算はNaNを得ますが、nullは数字0として演算に参加します.
前 ++ 和後++ 演算は単目演算です.演算元はnumber型に変換して演算に参加します.'a'++ 和 ++'a. NaNはNumber('a')=NaNを得ることができます.
+を単眼演算子とすると、「正を取る」と表します. alert(+'a') //NaN ,alert(typeof(+'1') //number
Number() 関数は、8進数の書式の文字列を10進数で処理し、先頭の0を削除します.
alert(012==10); //true
alert('012'==10); //false
alert(012=='012');//false
alert(09==9); //true , 8 ,
alert(012==10); //true 8
alert(Number(012));//10 ,(012).toString(10) '10'
alert(Number('012'));//12, 0, parseInt('012') firefox IE8 10( firefox 12), IE9、IE10 chrome 12
alert(0x12==18);//true
alert('0x12'==18);//true
alert(0x12=='0x12');//true
alert('0x12'=='18');//false , ,
alert(Number(0x12));//18
alert(Number('0x12'));//18
parseInt 文字列を10進数の整数に変換すると、2進数を受け取ることができます. つのパラメータ、二つ目のパラメータは、入力された文字列の進数を説明するために使用されます.
parseInt('abc',16) // 2748 ,16進数を返します abc 10進数に変換
対応する、number オブジェクトのtoString 方法は、1つのパラメータ表示をどの進法で文字列に変換してもよいです.
(2748).toString(16) //abc
Object スカラー Number 、String 、Boolean及び Date のコンストラクタが違います.
もし OB オブジェクトであれば、
OB === new Object(obj) === Object(obj)
Number 、String 、Boolean、 Date コンストラクタはnewごとに新しいオブジェクトを返します.newを使わないと新しいオブジェクトのvalueOfの値を返します.
var x = new Number();
x=== new Number(x) //false
x=== new Object(x) //true
//=======test=========
var x = new Number(1)
x=== new Number(x) //false
x=== new Object(x) //true
x=== Object(x) //true
x.constructor //function Number() { [native code] }
Object(x).constructor //function Number() { [native code] }
(new Object(x)).constructor //function Number() { [native code] }
typeof(new Number("123")); //object
typeof(Number("123")); //number, not object
転載先:https://www.cnblogs.com/ecalf/archive/2012/11/29/2793921.html