Properti enumerable vs non-enumerable javascript

SAMPAI saya telah melakukan semuanya salah sehubungan dengan refleksi objek API. Saya tidak memperhitungkan bahwa beberapa properti didefinisikan sebagai non-enumerable secara default, seperti yang ada di prototype API asli atau bawaan

Show

Misalnya, ketika Anda ingin memverifikasi bahwa String.prototype berisi metode tertentu, for..in loop dan metode

function inspect(obj) {
  var a = [];
  for (var k in obj) {
    a.push(k);
  }
  console.log(a);
  return a;
}

inspect('hello'); //  ["0", "1", "2", "3", "4"]
inspect({ name: ''}); //  ["name"]
inspect(String); //  []

// inherited
function Class(v) {
  this.v = v;
};
Class.prototype = {x: '1', y: '2', z: '9'};
inspect(Class); //  []
inspect(Class.prototype); // ["x", "y", "z"]
0 tidak berfungsi. Gunakan
function inspect(obj) {
  var a = [];
  for (var k in obj) {
    a.push(k);
  }
  console.log(a);
  return a;
}

inspect('hello'); //  ["0", "1", "2", "3", "4"]
inspect({ name: ''}); //  ["name"]
inspect(String); //  []

// inherited
function Class(v) {
  this.v = v;
};
Class.prototype = {x: '1', y: '2', z: '9'};
inspect(Class); //  []
inspect(Class.prototype); // ["x", "y", "z"]
_1 sebagai gantinya

Berikut adalah tur singkat

function inspect(obj) {
  var a = [];
  for (var k in obj) {
    a.push(k);
  }
  console.log(a);
  return a;
}

inspect('hello'); //  ["0", "1", "2", "3", "4"]
inspect({ name: ''}); //  ["name"]
inspect(String); //  []

// inherited
function Class(v) {
  this.v = v;
};
Class.prototype = {x: '1', y: '2', z: '9'};
inspect(Class); //  []
inspect(Class.prototype); // ["x", "y", "z"]
_0, loop
function inspect(obj) {
  var a = [];
  for (var k in obj) {
    a.push(k);
  }
  console.log(a);
  return a;
}

inspect('hello'); //  ["0", "1", "2", "3", "4"]
inspect({ name: ''}); //  ["name"]
inspect(String); //  []

// inherited
function Class(v) {
  this.v = v;
};
Class.prototype = {x: '1', y: '2', z: '9'};
inspect(Class); //  []
inspect(Class.prototype); // ["x", "y", "z"]
3, dan
function inspect(obj) {
  var a = [];
  for (var k in obj) {
    a.push(k);
  }
  console.log(a);
  return a;
}

inspect('hello'); //  ["0", "1", "2", "3", "4"]
inspect({ name: ''}); //  ["name"]
inspect(String); //  []

// inherited
function Class(v) {
  this.v = v;
};
Class.prototype = {x: '1', y: '2', z: '9'};
inspect(Class); //  []
inspect(Class.prototype); // ["x", "y", "z"]
1…

function inspect(obj) { var a = []; for (var k in obj) { a.push(k); } console.log(a); return a; } inspect('hello'); // ["0", "1", "2", "3", "4"] inspect({ name: ''}); // ["name"] inspect(String); // [] // inherited function Class(v) { this.v = v; }; Class.prototype = {x: '1', y: '2', z: '9'}; inspect(Class); // [] inspect(Class.prototype); // ["x", "y", "z"] 0metode

Metode

function inspect(obj) {
  var a = [];
  for (var k in obj) {
    a.push(k);
  }
  console.log(a);
  return a;
}

inspect('hello'); //  ["0", "1", "2", "3", "4"]
inspect({ name: ''}); //  ["name"]
inspect(String); //  []

// inherited
function Class(v) {
  this.v = v;
};
Class.prototype = {x: '1', y: '2', z: '9'};
inspect(Class); //  []
inspect(Class.prototype); // ["x", "y", "z"]
0 mengembalikan array dari properti enumerable milik objek yang diberikan

  • https. // pengembang. mozilla. org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

Singkatnya,

function inspect(obj) {
  var a = [];
  for (var k in obj) {
    a.push(k);
  }
  console.log(a);
  return a;
}

inspect('hello'); //  ["0", "1", "2", "3", "4"]
inspect({ name: ''}); //  ["name"]
inspect(String); //  []

// inherited
function Class(v) {
  this.v = v;
};
Class.prototype = {x: '1', y: '2', z: '9'};
inspect(Class); //  []
inspect(Class.prototype); // ["x", "y", "z"]
0 mengembalikan kunci untuk item yang dapat dihitung pada suatu objek, dan merupakan kunci "sendiri" (i. e. , yang tidak diwariskan dari prototipe objek)

function inspect(obj) {
  var a = Object.keys(obj);
  console.log(a);
  return a;
}

inspect('hello'); //  ["0", "1", "2", "3", "4"]
inspect({ name: ''}); //  ["name"]
inspect(String); //  []

// inherited
function Class(v) {
  this.v = v;
};
Class.prototype = {x: '1', y: '2', z: '9'};
inspect(Class); //  []
inspect(Class.prototype); // ["x", "y", "z"]
inspect(new Class('value')); //  ["v"]
_

Putaran function inspect(obj) { var a = []; for (var k in obj) { a.push(k); } console.log(a); return a; } inspect('hello'); // ["0", "1", "2", "3", "4"] inspect({ name: ''}); // ["name"] inspect(String); // [] // inherited function Class(v) { this.v = v; }; Class.prototype = {x: '1', y: '2', z: '9'}; inspect(Class); // [] inspect(Class.prototype); // ["x", "y", "z"] 3

Pernyataan

function inspect(obj) {
  var a = [];
  for (var k in obj) {
    a.push(k);
  }
  console.log(a);
  return a;
}

inspect('hello'); //  ["0", "1", "2", "3", "4"]
inspect({ name: ''}); //  ["name"]
inspect(String); //  []

// inherited
function Class(v) {
  this.v = v;
};
Class.prototype = {x: '1', y: '2', z: '9'};
inspect(Class); //  []
inspect(Class.prototype); // ["x", "y", "z"]
3 mengulangi properti yang dapat dihitung dari suatu objek, dalam urutan sewenang-wenang… Perulangan akan mengulangi semua properti yang dapat dihitung dari objek itu sendiri dan yang diwarisi objek dari prototipe konstruktornya

  • https. // pengembang. mozilla. org/en-US/docs/Web/JavaScript/Reference/Statements/for. di dalam
function inspect(obj) {
  var a = [];
  for (var k in obj) {
    a.push(k);
  }
  console.log(a);
  return a;
}

inspect('hello'); //  ["0", "1", "2", "3", "4"]
inspect({ name: ''}); //  ["name"]
inspect(String); //  []

// inherited
function Class(v) {
  this.v = v;
};
Class.prototype = {x: '1', y: '2', z: '9'};
inspect(Class); //  []
inspect(Class.prototype); // ["x", "y", "z"]

Namun, panggilan ini menemukan kunci

inspect(new Class('value')); //  ["v", "x", "y", "z"]
_0 yang diwarisi dari rantai prototipe

inspect(new Class('value')); //  ["v", "x", "y", "z"]

function inspect(obj) { var a = []; for (var k in obj) { a.push(k); } console.log(a); return a; } inspect('hello'); // ["0", "1", "2", "3", "4"] inspect({ name: ''}); // ["name"] inspect(String); // [] // inherited function Class(v) { this.v = v; }; Class.prototype = {x: '1', y: '2', z: '9'}; inspect(Class); // [] inspect(Class.prototype); // ["x", "y", "z"] 3 dengan inspect(new Class('value')); // ["v", "x", "y", "z"] 2

Untuk menduplikasi perilaku

function inspect(obj) {
  var a = [];
  for (var k in obj) {
    a.push(k);
  }
  console.log(a);
  return a;
}

inspect('hello'); //  ["0", "1", "2", "3", "4"]
inspect({ name: ''}); //  ["name"]
inspect(String); //  []

// inherited
function Class(v) {
  this.v = v;
};
Class.prototype = {x: '1', y: '2', z: '9'};
inspect(Class); //  []
inspect(Class.prototype); // ["x", "y", "z"]
0 (atau polyfill itu), periksa bahwa setiap kunci adalah "ownProperty" objek, menggunakan
inspect(new Class('value')); //  ["v", "x", "y", "z"]
2

function inspect(obj) {
  var a = [];
  for (var k in obj) {
    obj.hasOwnProperty(k) && (a.push(k));
  }
  console.log(a);
  return a;
}

inspect('hello'); //  ["0", "1", "2", "3", "4"]
inspect({ name: ''}); //  ["name"]
inspect(String); //  []

// inherited
function Class(v) {
  this.v = v;
};
Class.prototype = {x: '1', y: '2', z: '9'};
inspect(Class); //  []
inspect(Class.prototype); // ["x", "y", "z"]

Sekarang kunci

inspect(new Class('value')); //  ["v", "x", "y", "z"]
_0 yang diwarisi dari rantai prototipe dilewati

inspect(new Class('value')); //  ["v"]

function inspect(obj) { var a = []; for (var k in obj) { a.push(k); } console.log(a); return a; } inspect('hello'); // ["0", "1", "2", "3", "4"] inspect({ name: ''}); // ["name"] inspect(String); // [] // inherited function Class(v) { this.v = v; }; Class.prototype = {x: '1', y: '2', z: '9'}; inspect(Class); // [] inspect(Class.prototype); // ["x", "y", "z"] _1

Obyek. getOwnPropertyNames() mengembalikan array yang elemennya adalah string yang sesuai dengan properti enumerable dan non-enumerable yang ditemukan langsung pada obj

  • https. // pengembang. mozilla. org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames

Gunakan ini saat Anda ingin mengkueri objek atau fungsi asli atau bawaan untuk API properti "sendiri".

Apa yang bukan

Objek dapat memiliki properti yang tidak muncul saat diulang melalui objek tertentu menggunakan Object. keys() atau untuk. dalam lingkaran . Jenis properti tersebut disebut sebagai properti yang tidak dapat dihitung.

Apa itu properti yang dapat dihitung dalam JavaScript?

Properti yang dapat dihitung adalah properti yang bendera enumerable internalnya disetel ke true , yang merupakan default untuk properti yang dibuat melalui penetapan sederhana atau melalui . Properti didefinisikan melalui Objek. defineProperty dan semacamnya tidak dapat dihitung secara default.

Bagaimana cara memeriksa apakah properti adalah JavaScript yang dapat dihitung?

defineProperty() digunakan. Selain itu, untuk memeriksa apakah suatu properti dapat dihitung atau tidak, kami menggunakan fungsi propertyIsEnumerable() . Mengembalikan nilai true jika properti dapat dihitung atau false sebaliknya.

Apa perbedaan antara iterable dan enumerable dalam JavaScript?

Enumerable vs Iterable . Objek dianggap iterable ketika mereka mengimplementasikan protokol iterable. Agar objek dapat mengimplementasikan protokol iterable, objek tersebut harus berisi metode bernama Symbol. Objects are considered enumerable when they contain properties with the enumerable property descriptor set to true . Objects are considered iterable when they implement the iterable protocol. For an object to implement the iterable protocol, it must contain a method named Symbol.