javascriptは循環対象を巡回して、対象かどうかを判断する方法です.


最近会社に面接をさせられた時に、「相手を遍歴する方法」を聞いたら、彼女は私にかつて使ったことがない方法をくれました.
一.オブジェクトを巡回する方法
1.for…in文を使う
      for.in文は、オブジェクトの属性を列挙するために使用される反復文であり、循環配列としても使用されます.しかし、ここには穴があります.原型の方法名も遍歴します.
Object.prototype.method=function(){
  console.log(this);
}
var myObject={
  a:1,
  b:2,
  c:3
}
for (var key in myObject) {
  console.log(key); // a b c method
}
2.Object.keysを使って対象を遍歴する
      今日学んだのはこの方法で、まずObject.keysを通して対象の中の全てのkey値の配列を見つけて、それからforEachを取得します.
var obj = {
    name: 'Seeme',
    age: 27,
    job: 'Software Engineer'
};

Object.keys(obj).forEach(function(key){

     console.log(key,obj[key]);

});
3.for...ofステートメントを使う
for...ofステートメントは、Aray、Map、Set、String、TypedAray、argmentsなどを巡回します.
二.対象を判断する方法
      基本データタイプを判断する場合、typeofオペレータは文字列、数値、ブール値、またはundefinedの値を正確に判断することができます.変数の値がオブジェクトまたはnullの場合、typeofオペレータはすべて「object」に戻ります.ただし、参照の種類の値を検出する際には、このオペレータの役割は大きくない.この場合、次のような方法があります.
1.instance of
const obj = {
  age: 27,
  name: 'Seeme'
};
const arr = [1, 2, 3];
const reg = /\[bc\]at/;
console.log(obj instanceof Object); // true
console.log(obj instanceof Array); // false
console.log(arr instanceof Object); // true
console.log(arr instanceof Array); // true
console.log(reg instanceof RegExp); // true
console.log(reg instanceof Object); // true
戻ってきたinstance ofが返すブール値によって、Object、Aray、RegExp、Booleanかどうかを判断できますが、ArayとRegExpはいずれも参照タイプですので、Objectの場合もtrueと判断します.
2.constructor
var obj = { 
           name:'Nickolas'
        };
var arr = [1, 2, 3];
console.log(obj.constructor == Object);//true
console.log(arr.constructor == Array);//true
      しかし、コントローラーには一つの問題があります.原型の対象がない場合、問題があると判断します.次の例のように
function Person() {};
Person.prototype = {
    name: 'Seeme',
    age: 27,
    job: 'Software Engineer'
}
function PersonName() {};
var person1 = new Person();
var personName1 = new PersonName();
console.log(person1.constructor == Object) // true
console.log(person1 instanceof Object) // true
console.log(personName1.constructor == Object) // false
console.log(personName1 instanceof Object) // true
3.prototype.toString方法
      この方法は、Object、Aray、Funct、RegExpをそれぞれ検出することができます.
function fun() {}
var arr = [1, 2, 3]
var obj = {
  name: 'Seeme',
  age: 27
}
console.log(Object.prototype.toString.call(fun)); // "[object Function]"

console.log(Object.prototype.toString.call(arr)); // "[object Array]"
console.log(Object.prototype.toString.call(obj)); // "[object Object]"