คำตอบที่มีประสิทธิภาพมากที่สุด (เช่นที่จับภาพเจตนาของสิ่งที่คุณพยายามทำในขณะที่ทำให้เกิดข้อบกพร่องน้อยที่สุด) คือ:
Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};
// Get the size of an object
var size = Object.size(myObj);
มีการเรียงลำดับของการประชุมใน JavaScript ที่คุณไม่ได้เพิ่มสิ่งต่าง ๆ ใน Object.prototypeเพราะมันสามารถแยกการแจกแจงในไลบรารีต่างๆ แม้ว่าการเพิ่มวิธีการไปยังวัตถุมักจะปลอดภัย
นี่คือการอัปเดตในปี 2559 และการปรับใช้ ES5 อย่างกว้างขวางและอื่น ๆ   สำหรับ IE9 + และเบราว์เซอร์ที่มีความสามารถ ES5 + ที่ทันสมัยอื่น ๆ คุณสามารถใช้Object.keys()เพื่อให้โค้ดข้างต้นกลายเป็น:
var size = Object.keys(myObj).length;
สิ่งนี้ไม่จำเป็นต้องแก้ไขต้นแบบที่มีอยู่ตั้งแต่Object.keys()ตอนนี้ภายใน
แก้ไข : วัตถุสามารถมีคุณสมบัติเป็นสัญลักษณ์ซึ่งไม่สามารถส่งคืนได้ด้วยวิธีการ Object.key ดังนั้นคำตอบจะไม่สมบูรณ์โดยไม่ต้องพูดถึง
เพิ่มประเภทสัญลักษณ์ในภาษาเพื่อสร้างตัวระบุที่ไม่ซ้ำกันสำหรับคุณสมบัติของวัตถุ ประโยชน์หลักของประเภทสัญลักษณ์คือการป้องกันการเขียนทับ
Object.keysหรือObject.getOwnPropertyNamesไม่ทำงานสำหรับคุณสมบัติเชิงสัญลักษณ์ Object.getOwnPropertySymbolsจะกลับพวกเขาคุณจะต้องใช้
var person = {
  [Symbol('name')]: 'John Doe',
  [Symbol('age')]: 33,
  "occupation": "Programmer"
};
const propOwn = Object.getOwnPropertyNames(person);
console.log(propOwn.length); // 1
let propSymb = Object.getOwnPropertySymbols(person);
console.log(propSymb.length); // 2