javascriptのfor inとin演算子


for inループがあることだけは知っていましたが、in演算子は分かりません.for inとinはオブジェクトを遍歴してプロトタイプに追加された属性も遍歴されます.
n演算子の規則:演算子の左右の2つの操作数に対する要求は厳しいです.n演算子は、1番目(左)の演算数が文字列タイプでなければなりません.または文字列タイプに変換できる他のタイプでなければなりません.2番目(右)の演算数は、配列、オブジェクト、またはnewで生成されるオブジェクトでなければなりません.1番目の操作数の値だけが2番目の操作数の属性名です.trueに戻ります.そうでないとfalseに戻ります.
for inとin演算子のkeyはオブジェクトの属性であり、Arayでは配列の索引です.
for in
var obj = {
    "key1":"value1",
    "key2":"value2",
    "key3":"value3"
};
function enumeKey(){
    for(var key in obj ){
        console.log(key);
    }
}
enumeKey() //key1 key2 key3
配列のエルゴードは順序を保証できないので、なるべく使わないようにします.for-i-nは配列以外のオブジェクトのエルゴードに循環します.for-iを使って循環します.「列挙」とも呼ばれます.したがって、最も良い配列は正常なforサイクル(ECMA-622標準のfor eachも使用できます)を使用し、オブジェクトはfor-iループを使用します.
//   
var man = {
   hands: 2,
   legs: 2,
   heads: 1
};

//         
//             
if (typeof Object.prototype.clone === "undefined") {
   Object.prototype.clone = function () {};
}
上のコードには、対象の字面量を使って定義されたmanというオブジェクトがあります.マン定義が完了した後のあるところに、オブジェクトの原型に、clone(という)という有用な方法が追加されました.このプロトタイプチェーンはリアルタイムであり、これはすべてのオブジェクトが自動的に新しい方法にアクセスできることを意味する.エニュメレーションマンの時にclone()の方法が現れることを避けるために、ハスOwnProperty()の方法を使って原型の属性をフィルタリングする必要があります.フィルタリングをしないと、clone()関数が表示されます.ほとんどの場合、これは望ましくないです.
// 1.
// for-in   
for (var i in man) {
   if (man.hasOwnProperty(i)) { //   
      console.log(i, ":", man[i]);
   }
}
/*         hands : 2 legs : 2 heads : 1 */

// 2.
//     :
// for-in loop without checking hasOwnProperty()
for (var i in man) {
   console.log(i, ":", man[i]);
}
/*         hands : 2 legs : 2 heads : 1 clone: function() */
もう一つはハスOwnProperty()を使用する形でObject.prototypeをキャンセルする方法であり、ハスOwnPropertyをマンオブジェクトに再定義する場合にネーミング衝突を避けることが利点である.
for (var i in man) {
   if (Object.prototype.hasOwnProperty.call(man, i)) { //   
      console.log(i, ":", man[i]);
   }
}
//      ,      ,jquery      
var i, hasOwn = Object.prototype.hasOwnProperty;
for (i in man) {
    if (hasOwn.call(man, i)) { //   
        console.log(i, ":", man[i]);
    }
}
javascriptのin演算子
注意事項:一般的なオブジェクト属性には、属性の名称を文字列で指定する必要があります.
var mycar = {make: "Honda", model: "Accord", year: 1998};
"make" in mycar  // returns true
"model" in mycar // returns true

//                            (      , length)。

// Arrays
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
0 in trees        // returns true
3 in trees        // returns true
6 in trees        // returns false
"bay" in trees    // returns false (you must specify the index number,
                  // not the value at that index)
"length" in trees // returns true (length is an Array property)

//in          , :        String      ,               :

var color1 = new String("green");
"length" in color1 // returns true
var color2 = "coral";
"length" in color2 // generates an error (color is not a String object)

//     delete          ,   in   ,   false, :

var mycar = {make: "Honda", model: "Accord", year: 1998};
delete mycar.make;
"make" in mycar;  // returns false

var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
delete trees[3];
3 in trees; // returns false


//           undefined,      delete   ,  in  ,   true.

var mycar = {make: "Honda", model: "Accord", year: 1998};
mycar.make = undefined;
"make" in mycar;  // returns true


var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
trees[3] = undefined;
3 in trees; // returns true
javascriptオブジェクト演算子
  • inは、左側演算数が右演算数のメンバ
  • であるかどうかを判断する.
  • instance of判定対象があるクラスまたは構造関数
  • に属するかどうか
  • newは、構造関数に基づいて新しいオブジェクトを作成し、オブジェクト
  • を初期化する.
  • deleteは、指定されたオブジェクトの属性、配列要素または変数
  • を削除する.
  • .および[]アクセス対象と配列要素は、keyが変数varに割り当てられている場合、[var]
  • を使用することができます.
  • ()関数呼び出し、演算子優先度の変更などの