1.jsの6つの値
js には 6 つの false 値があり、0、""、null、undefined、NaN、false、その他 ({}、[]、無限大を含む) が true です。
オブジェクトのブール値を取得するには、 Boolean() 関数を使用するか、否定を 2 回行うことができます。たとえば、Boolean(undefined) および !!undefined は、ブール値 false も取得できます。
二、jsの比較ルール
比較された 2 つにブール値がある場合、ブール値は最初に対応する数値、つまり 0 と 1 に変換されます。
比較の両側の一方が数値で、もう一方が文字列の場合、文字列は数値に変換されます
文字列を直接ブール値に変換すると、空の文字列は false に変換され、他のすべての文字列は true になります
1. if ('0') alert("'0' is true");
2. if ('0' == false) alert("'0' is false");
3.
4. 运行结果:两次都会alert
Ⅰ.NaN
NaN は、NaN 自体を含め、どの値とも等しくありません。
Ⅱ. 等値演算子
等値演算子と不等値演算子は、異なるデータ型間で変換する場合、次の基本的な規則に従います。
1. オペランドの 1 つがブール値の場合、等値を比較する前に数値に変換されます。false は 0 に変換され、true は 1 に変換されます。
2. 1 つのオペランドが文字列で、もう 1 つのオペランドが数値の場合、等しいかどうかを比較する前に文字列を数値に変換します。
3. 一方のオペランドがオブジェクトで、もう一方のオペランドがそうでない場合、オブジェクトの valueOf() メソッドを呼び出し、取得した基本型の値を使用して前の規則に従って比較します。
Ⅲ.ナンバー型
Number() 関数の変換規則は次のとおりです。
1. ブール値の場合、true と false はそれぞれ 1 と 0 に変換されます
2. 数値の場合は、単純に渡されて返されます。
3. null 値の場合は、0 を返します。
4. 未定義の場合は NaN を返します。
5. 文字列の場合は、次の規則に従います。
5.1 文字列に数字のみが含まれている場合 (プラス記号またはマイナス記号が前にある場合を含む)、それを 10 進数値に変換します。つまり、「1」は 1 になり、「123」は 123 になり、「011」は 11 になります。 (注: 先頭のゼロは無視されます);
5.2 文字列に「1.1」などの有効な浮動小数点形式が含まれている場合は、対応する浮動小数点値に変換します (先頭のゼロも無視されます)。
5.3 文字列に「0xf」などの有効な 16 進形式が含まれている場合は、それを同じサイズの 10 進整数値に変換します。
5.4 文字列が空 (文字を含まない) の場合は、0 に変換します。
5.5 文字列に上記の形式以外の文字が含まれている場合は、NaN に変換します。
Ⅳ.'true'==true; false を返す理由
まず、'true' == true はルール 1 に準拠しており、'true' == 1 を評価することになります。
この時点で、式はルール 2 に準拠し、Number 関数を使用して 'true' を値に変換します. ルール 5 およびルール 5.5 によれば、Number('true') の値は NaN です。現在の問題は NaN == 1 と評価されます。
次に、NaN ルールに従って、NaN == 1 の値は false です。
最後に、もう一度ストロークします。 'true' == true --> 'true' == 1 --> NaN == 1 --> false
3. ! と !! の違いと使い方
1. !変数はブール型に変換でき、null、未定義、および空の文字列の反転はすべて真です
2. !! 型判定によく使われます、最初のステップの後! (変数)、論理否定を行います
let a;
if(a!=null&&typeof(a)!=undefined&&a!=''){
//a有内容才执行的代码
}
if(!!a){
//a有内容才执行的代码...
}
//上面两种写法实现的功能一样,下面一种明显更简单
第四に、== と === の違い
1. ===: 等価記号と呼ばれる. 両側の値の型が同じ場合, 値を直接比較. 型が同じでない場合, 直接falseを返す;
2. ==: 同値記号と呼ばれる. 等号の両側の型が同じ場合, 値が等しいかどうかを直接比較. 同じでない場合は, 最初にの値に変換します.同じタイプで、比較します。
型変換規則:
1) ブール値、文字列、または数値のいずれか 2 つが比較のために等号の両側にある場合は、最初に数値に変換して比較します。
2) null または undefined が等号の両側にある場合、null と undefined は、それら自体が等しいことを除いて互いに等しい
注: NaN==NaN // false を返します。NaN は、それ自体を含むすべての値と等しくありません。
追加: null と undefined に関する興味深いプロパティがいくつかあります。
値が null の変数で typeof 演算子を使用すると、結果は object になります。
undefined の値に typeof を使用すると、結果は未定義です
5、typeof と instanceof の使用法
1. typeof は、変数または式の型を取得するために使用されます。typeof は通常、次の結果のみを返すことができます。
数値、ブール値、文字列、関数 (関数)、オブジェクト (NULL、配列、オブジェクト)、未定義。
注: a が存在しない (宣言されていない) 場合はエラーが発生するため、if(a) を使用する代わりに、if(typeof a!="undefined"){} のように typeof を使用して変数が存在するかどうかを取得できます。
null、配列、およびオブジェクトに遭遇したときに typeof がオブジェクト型を返すという理由だけで、オブジェクトが配列であるかどうか、または変数がオブジェクトのインスタンスであるかどうかを判断したい場合は、別のキー構文 instanceof を使用することを選択する必要があります。
2. instanceof は、変数がオブジェクトのインスタンスであるかどうかを判断するために使用されます
var a=new Array();
alert(a instanceof Array);
//会返回true,
alert(a instanceof Object)
//也会返回true;这是因为Array是object的子类。
function test(){};
var a=new test();
alert(a instanceof test)
//会返回true
console.log(true instanceof Boolean); 返回false
console.log(new Boolean(true) instanceof Boolean); 返回true