JavaScriptは二つの配列の内容が同じかどうかを比較します.

1770 ワード

今日は廖雪峰大神さんのブログを見ていますが、javascriptは使えないことに気づきました.
まず判例を見ます
var a = [1,2,3,4,5];
var b = a.slice();
console.log(a);          //  [1,2,3,4,5]
console.log(b);          //  [1,2,3,4,5]
console.log(a === b);    //  false
console.log(a == b);     //  false
console.log([] == []);   //  false
console.log( [] === []); //  false
どうしてfalseを出力しますか?まず以下の点を確認します.
  • javascriptは、基本データタイプと参照データタイプの2つの異なるタイプの値を含む.
  • 基本データタイプは簡単なデータセグメントを指し、参照データタイプは複数の値からなるオブジェクトを意味する.
  • 一般的な基本データタイプ:Number、String、Boolean、Null、Udefined.
    var a = 10;
    var b = a;
    b = 20;
    console.log(a);  //  10
    上のbはa値のコピーであり、2つの変数の値は等しいが、2つの変数は2つの異なる基本データタイプの値を保存している.bはa割当値のコピーを保存しただけで、bの変更はaに影響しない.
  • 参照タイプデータ:すなわちオブジェクトタイプObject typeであり、例えば、Object、Aray、Function、Dataなどである.javascriptの参照データタイプは、ヒープメモリに保存されているオブジェクトです.
  • ここでは、出力がfalseである理由を理解するべきです.配列は換金されているので、====または==操作子は、2つのオブジェクトが同じインスタンスであるかどうかを比較するしかないです.つまり、同じオブジェクト参照ですか?現在JavaScriptには内蔵されているオペレータがありません.対象の内容は同じですか?
    配列が等しいかどうかを判定するにはどうすればいいですか?
  • 配列を文字列に変換する方法があります.JSON.strigify(a 1)==JSON.strigify(a 2)またはa 1.toStering()==a 2.tostring();この方法を使わないでください!!この方法はある場合には可能であり、2つの配列の要素順序が同じであり、要素が文字列に変換できる場合には確実に実行可能である.このようなコードは、数字が文字列に変換されると、数字「1」と文字列「1」が同じと考えられ、デバッグが困難になる可能性があります.
  • 別の方法:
  • function equar(a, b) {
        //        
        if (a.length !== b.length) {
            return false
        } else {
            //             
            for (let i = 0; i < a.length; i++) {
                if (a[i] !== b[i]) {
                    return false
                }
            }
            return true;
        }
    }
    var s = equar([1, '2', 3], [1, 2, 3]);
    var t = equar([1, 2, 3], [1, 2, 3]);
    console.log(s);  //  false
    console.log(t);  //  true
    以上が私のまとめです.間違ったところがあったら指摘してください.