一つの文章はJavaScriptタイプの転換を解決します。(面接でよく見られます。)


なぜこれを言いますか?面接問題というのは動機を話してください。
問題は以下の通りです

var bool = new Boolean(false);
if (bool) {
 alert('true');
} else {
 alert('false');
}
運行結果はtrueです!
どのタイプの転換ですか?操作者優先度とか、これらは一番基本的です。サイの本に詳しい紹介があります。しかし、サイの本を読む前5章はめったにないです。
例えば優先順位の塊は、多くの本に教えられています。「優先順位を暗記しなくてもいいです。不確かなら、括弧を入れてもいいです。」普通コードを書く時もそうします。
でも現実はなんですか?面接の時、このような問題を出して、あなたにさせます。この問題の意味が分かりません。
ここまで文句を言って、本論文では類型転換問題を解決して、「JS権威ガイド」49ページの表を暗記するように努力します。
どれらのものが偽物ですか?
合計6つ:

0 +0、-0,NaN
""
false
undefined
null
上の順番は基本タイプで並べられています。
これ以外のものは全部ではない!たとえ次のような形であっても、

Infinity
'0'、'false'、" "(    )
      :[],{},function(){}
if(a&&b)の正しい理解方法は、a&bが式を行って値を求めた後、Booleanタイプに変換します。
&&&は短絡文法で、値を求めた後に必ずBooleanタイプではなくて、更に両側がブール値を転化して再び計算するのではありません。
例えば2&&3の結果は3で、trueではありません。
だからif(a&&b)は、私たちが普段理解しているような、「aとbが同時に本当であれば」という誤った表現です。
その他の基本的なタイプは文字列に変換されます。基本的には予想通りです。

console.log("" + null);   // "null"
console.log("" + undefined); // "undefined"
console.log("" + false);   // "false"
console.log("" + true);   // "true"
console.log("" + 0);     // "0"
console.log("" + NaN);    // "NaN"
console.log("" + Infinity); // "Infinity"
その他の基本的なタイプは数字に転化します。特別な記憶が必要です。

console.log(+null);     // 0
console.log(+undefined);   // NaN
console.log(+false);     // 0
console.log(+true);     // 1
console.log(+"");      // 0
console.log(+'1');      // 1
console.log(+'1x');     // NaN 
ここでnull、空の文字は0、undefinedはNaNです。
以上、基本タイプの転換は全部分かりました。
参照の種類を基本タイプに変換します。
引用の種類はブールに変換されます。常にtrueです。
参照の種類を文字列に変換
1.ToSteringメソッドを優先的に呼び出し(ある場合)、その戻り結果が元のタイプかどうかを確認し、もしそうであれば、文字列に変換して返します。
2.さもなければ、valueOfメソッドを呼び出し(ある場合)、その結果が元のタイプかどうかを確認し、もしそうであれば、文字列に変換して返します。
3.他のエラー。
参照の種類を数値に変換
1.valueOfメソッドを優先的に呼び出し(ある場合)、その結果が基本タイプかどうかを確認し、もしそうであれば、数字に変換して返します。
2.もしそうでなければ、ToSteringメソッドを呼び出し(ある場合)、その戻り結果が基本タイプかどうかを確認し、もしそうであれば、数字に変換して返します。
3.他のエラー。
まず、よくある引用タイプtoStringとvalueOfは何を返しますか?

var a = {};
console.dir(a.toString());  // "[object Object]"
console.dir(a.valueOf());  //     
var b = [1, 2, 3];
console.dir(b.toString());  // "1,2,3"
console.dir(b.valueOf());  //     
var c = [[1],[2]];
console.dir(c.toString());  // "1,2"
console.dir(c.valueOf());  //     
var d = function() {return 2};
console.dir(d.toString());  // "function() {return 2}"
console.dir(d.valueOf());  //     
したがって、対応する変換が文字列と数字の場合は、

var a = {};
console.dir(a + "");     // "[object Object]"
console.dir(+a);       // NaN
var b = [1, 2, 3];
console.dir(b + "");     // "1,2,3"
console.dir(+b);       // NaN
var c = [[1],[2]];
console.dir(c + "");     // "1,2"
console.dir(+c);       // NaN
var d = function() {return 2};
console.dir(d + "");     // "function () {return 2}"
console.dir(+d);       // NaN
もう一つ間違えた状況を報告します。

var a = {};
a.toString = function() {return {};}
console.log("" + a);     //   
console.log(+a)       //   
以上のタイプは法則を変えて基本的に言います。
最後に悪の「=」を言います。
面接の問題は次の通りです

var a = false;
var b = undefined;
if (a == b) {
 alert('true');
} else {
 alert('false');
}
trueが弾けると思いました。あらなぜfalseですか
ははは。
二等号は、両側のタイプが違ったら、暗黙的な変換が発生します。サイの本の75ページのまとめは以下の通りである。
1,nullとundefinedは、同じです。
2,数字と文字列は、数字に変換して比較します。
3,trueまたはfalseがあれば、1または0に変換して比較します。
4,引用の種類があれば、valueOfを優先的に呼び出します。
5,その他はすべて等しくありません。
したがって、

console.log(undefined == false); // false
console.log(null == false);   // false
console.log(0 == false);     // true
console.log(NaN == false);    // false
console.log("" == false);    // true
0==falseがtrueである理由は第3条による。
"==falseがtrueである理由は第3条により、"==0になり、第2条による。
第4条もう一つの例:

console.log([[2]] == '2')
その上の結果はtrueです。理由は以下の通りです。
[2]のvalueOfは対象自体であり、基本タイプではない。
toStringを呼び出してみたところ、'2'となりました。
だから'2'と数字2の比較になりました。第2条により、等しい。WTRF
最後に、「===」を使っても大丈夫です。
以上は小编が皆さんに绍介した文章で、JavaScriptタイプの転换(面接でよく见られます)ができました。皆さんに助けてほしいです。ここでも私たちのサイトを応援してくれてありがとうございます。