react nativeにおけるundefinedとnullによる血液事件

3862 ワード

最近react-nativeの関連開発を行っていますが、自分は以前は主にAndroidとバックエンドPHPの仕事をしていたのかもしれません(PHPも大黒柱を選んだことがありません~)、JSについては把握が不十分で初心者レベルだったかもしれませんので、私のコードがこのように書かれているとき(this.state.datas.layouts私は値をつけていないので、それは「空の値」のはずです):
//   
    constructor(props) {
        super(props);
        //     
        this.state = {
            datas:{name:''},//      layouts  
        };
    }
var listView = (this.state.datas.layouts === null ?  : 
        .state.datas.layouts[0].children[0].children[0].selects}
            keyExtractor={this._extraUniqueKey}
        >);

実行中に次のエラーが発生しました.
undefined is not an object(evaluating 'this.state.datas.layouts[0]')

つまり、これはstate.datas.Layouts==nullは私が望むようにtrueではなくfalseとなってFlatListを後で初期化する操作を実行した.
次のコードに変更すると、エラーは消えます.
var lotteryListView = (this.state.datas.layouts == null ?  : 
        .state.datas.layouts[0].children[0].children[0].selects}
            keyExtractor={this._extraUniqueKey}
        >);

または
var lotteryListView = (this.state.datas.layouts === undefined ?  : 
        .state.datas.layouts[0].children[0].children[0].selects}
            keyExtractor={this._extraUniqueKey}
        >);

すなわち,問題はundefinedとnullにあり,==と==であるべきである.
説明
JavaScriptには、undefinedとnullの2つの「なし」を表す値があります.undefinedは「欠落した値」を表します.ここに値があるはずですが、まだ定義されていません.たとえば、変数は宣言されますが、値は割り当てられていません.それはundefinedです.nullは値が定義されていることを示しますが、空の値です.==比較時にデータ型を変換できます.==厳密な比較で、タイプが一致しない限りflaseを返します.では私の間違いではstate.datas.Layoutsは定義されておらず、空の値であるため、=nullまたは==undefinedを使用することができます.ただし==nullの場合、そのタイプはまだ確定していない(定義や初期化されていない)ため、使用できません.
http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html https://www.jianshu.com/p/959a82fd6ed7