Pertanyaan Periksa apakah suatu nilai adalah objek dalam JavaScript


Bagaimana Anda memeriksa apakah suatu nilai adalah Objek dalam JavaScript?


844
2017-12-14 20:35


asal


Jawaban:


Coba gunakan typeof(var) dan / atau var instanceof something.

EDIT: Jawaban ini memberikan gambaran tentang bagaimana memeriksa properti variabel, tetapi itu tidak resep antipeluru (toh tidak ada resep sama sekali!) untuk memeriksa apakah itu benda, jauh dari itu. Karena orang cenderung mencari sesuatu untuk disalin dari sini tanpa melakukan penelitian, saya akan sangat menyarankan agar mereka beralih ke jawaban yang lain, paling jujur ​​(dan benar!).


330
2017-12-14 20:39



Jika typeof yourVariable === 'object', itu sebuah objek atau null. Jika Anda ingin mengecualikan nol, buat saja yourVariable !== null && typeof yourVariable === 'object'.


1015
2017-12-14 20:40



Mari kita mendefinisikan "objek" di Javascript. Menurut Dokumen MDN, setiap nilai adalah objek atau primitif:

primitif, nilai primitif

Data yang bukan objek dan tidak memiliki metode apa pun. JavaScript memiliki 5 tipe data primitif: string, angka, boolean, null, tidak terdefinisi.

Apa yang primitif?

  • 3
  • 'abc'
  • true
  • null
  • undefined

Apa itu objek (bukan primitif)?

  • Object.prototype
  • semuanya berasal Object.prototype
    • Function.prototype
      • Object
      • Function
      • function C(){} - fungsi yang ditentukan pengguna
    • C.prototype - properti prototipe dari fungsi yang ditentukan pengguna: ini tidak  Cprototipe
      • new C() - "baru" - fungsi yang ditentukan pengguna
    • Math
    • Array.prototype
      • array
    • {"a": 1, "b": 2} - objek dibuat menggunakan notasi literal
    • new Number(3) - pembungkus di sekitar primitif
    • ... banyak hal lainnya ...
  • Object.create(null)
  • semuanya berasal dari Object.create(null)

Bagaimana cara memeriksa apakah suatu nilai adalah objek

instanceof dengan sendirinya tidak akan berfungsi, karena merindukan dua kasus:

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}

typeof x === 'object' tidak akan berfungsi, karena kesalahan positif (null) dan negatif palsu (fungsi):

// oops: isObject(Object) -> false
function isObject(val) {
    return (typeof val === 'object');
}

Object.prototype.toString.call tidak akan berfungsi, karena positif palsu untuk semua primitif:

> Object.prototype.toString.call(3)
"[object Number]"

> Object.prototype.toString.call(new Number(3))
"[object Number]"

Jadi saya menggunakan:

function isObject(val) {
    if (val === null) { return false;}
    return ( (typeof val === 'function') || (typeof val === 'object') );
}

Jawaban @ Daan juga tampaknya bekerja:

function isObject(obj) {
  return obj === Object(obj);
}

karena, menurut Dokumen MDN:

Objek konstruktor menciptakan pembungkus objek untuk nilai yang diberikan. Jika nilainya nol atau tidak terdefinisi, ia akan membuat dan mengembalikan objek kosong, jika tidak, ia akan mengembalikan objek dari jenis yang sesuai dengan nilai yang diberikan. Jika nilai sudah menjadi obyek, itu akan mengembalikan nilainya.


Cara ketiga yang tampaknya berhasil (tidak yakin apakah itu 100%) adalah untuk digunakan Object.getPrototypeOf yang melempar pengecualian jika argumennya bukan objek:

// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})

429
2018-03-18 14:44



Resmi underscore.js menggunakan cek ini untuk mencari tahu apakah sesuatu itu benar-benar sebuah objek

// Is a given variable an object?
_.isObject = function(obj) {
  return obj === Object(obj);
};

173
2018-02-05 11:50



Object.prototype.toString.call(myVar) akan kembali:

  • "[object Object]" jika myVar adalah objek
  • "[object Array]" jika myVar adalah sebuah array
  • dll.

Untuk informasi lebih lanjut tentang ini dan mengapa itu adalah alternatif yang baik untuk mengetik, lihat artikel ini.


148
2017-11-13 06:20



Saya suka hanya:

function isObject (item) {
  return (typeof item === "object" && !Array.isArray(item) && item !== null);
}

Jika item tersebut adalah objek JS, dan itu bukan larik JS, dan tidak null... jika ketiganya terbukti benar, kembalilah true. Jika salah satu dari tiga kondisi gagal, && tes akan korsleting dan false akan dikembalikan. Itu null tes dapat dihilangkan jika diinginkan (tergantung pada bagaimana Anda menggunakan null).

DOCS:

http://devdocs.io/javascript/operators/typeof

http://devdocs.io/javascript/global_objects/object

http://devdocs.io/javascript/global_objects/array/isarray

http://devdocs.io/javascript/global_objects/null


65
2017-09-07 22:49



Untuk sekadar memeriksa Objek atau Array tanpa panggilan fungsi tambahan (kecepatan). Seperti juga diposting sini.

isArray ()

isArray = function(a) {
    return (!!a) && (a.constructor === Array);
};
console.log(isArray(        )); // false
console.log(isArray(    null)); // false
console.log(isArray(    true)); // false
console.log(isArray(       1)); // false
console.log(isArray(   'str')); // false
console.log(isArray(      {})); // false
console.log(isArray(new Date)); // false
console.log(isArray(      [])); // true

isObject () - Catatan: gunakan hanya untuk literal Obyek, karena mengembalikan salah untuk objek kustom, seperti Tanggal baru atau baruCustomObject.

isObject = function(a) {
    return (!!a) && (a.constructor === Object);
};
console.log(isObject(        )); // false
console.log(isObject(    null)); // false
console.log(isObject(    true)); // false
console.log(isObject(       1)); // false
console.log(isObject(   'str')); // false
console.log(isObject(      [])); // false
console.log(isObject(new Date)); // false
console.log(isObject(      {})); // true

61
2018-05-17 11:39