Làm cách nào để đếm hiệu quả số lượng khóa / thuộc tính của một đối tượng trong JavaScript?


1544

Cách nhanh nhất để đếm số lượng khóa / thuộc tính của một đối tượng là gì? Nó có thể làm điều này mà không lặp đi lặp lại trên đối tượng? tức là không làm

var count = 0;
for (k in myobj) if (myobj.hasOwnProperty(k)) count++;

(Firefox đã cung cấp một thuộc tính ma thuật __count__, nhưng điều này đã bị xóa ở đâu đó xung quanh phiên bản 4.)



2
điểm chuẩn hiệu suất cho các cách khác nhau: jsben.ch/#/oSt2p
EscapeNetscape

Câu trả lời:


2516

Để thực hiện việc này trong mọi môi trường tương thích ES5 , chẳng hạn như Node , Chrome, IE 9+, Firefox 4+ hoặc Safari 5+:

Object.keys(obj).length

8
Không chỉ Node.js, mà bất kỳ môi trường nào hỗ trợ ES5
Yi Jiang

59
BTW ... chỉ cần chạy một số thử nghiệm ... phương pháp này chạy trong thời gian O (n). Một vòng lặp for không tệ hơn nhiều so với phương pháp này. ** mặt buồn ** stackoverflow.com/questions/7956554/ từ
BMiner

161
-1 (-200 nếu tôi có thể) Điều này không chỉ lặp qua đối tượng mà còn tạo ra một mảng hoàn toàn mới với tất cả các khóa của nó, vì vậy nó hoàn toàn thất bại trong việc trả lời câu hỏi.
GetFree

42
Nó dường như nhanh hơn nhiều so với thực hiện (ít nhất là trên Chrome 25): jsperf.com/count-elements-in-object
fserb

34
@GetFree Tại sao rất nhiều ngón tay cái lên? Đây chắc chắn là cách nhanh nhất về mặt mã hóa. Không có phương pháp bổ sung hoặc thư viện cần thiết. Về tốc độ mã, rõ ràng nó cũng không quá tệ. Không phải là một thất bại hoàn toàn ở tất cả. 87 ngón tay cái lên thất bại cho bạn.
Andrew

150

Bạn có thể sử dụng mã này:

if (!Object.keys) {
    Object.keys = function (obj) {
        var keys = [],
            k;
        for (k in obj) {
            if (Object.prototype.hasOwnProperty.call(obj, k)) {
                keys.push(k);
            }
        }
        return keys;
    };
}

Sau đó, bạn cũng có thể sử dụng điều này trong các trình duyệt cũ hơn:

var len = Object.keys(obj).length;

2
Mục đích của việc kiểm tra là (Object.prototype.hasOwnProperty.call(obj, k))gì?
styfle

14
@styfle Nếu bạn sử dụng vòng lặp for để lặp lại các thuộc tính của đối tượng, bạn cũng có được các thuộc tính trong chuỗi nguyên mẫu. Đó là lý do tại sao kiểm tra hasOwnPropertylà cần thiết. Nó chỉ trả về các thuộc tính được thiết lập trên chính đối tượng.
Renaat De Muynck

13
@styfle Để làm cho nó đơn giản hơn, bạn chỉ có thể viết obj.hasOwnProperty(k)(Tôi thực sự đã làm điều này trong bài viết gốc của mình, nhưng đã cập nhật nó sau). hasOwnPropertycó sẵn trên mọi đối tượng vì nó là một phần của Objectnguyên mẫu, nhưng trong trường hợp hiếm hoi phương pháp này sẽ bị xóa hoặc ghi đè, bạn có thể nhận được kết quả không mong muốn. Bằng cách gọi nó từ Object.prototypenó làm cho nó mạnh mẽ hơn một chút. Lý do sử dụng calllà vì bạn muốn gọi phương thức trên objthay vì trên nguyên mẫu.
Renaat De Muynck

6
Sẽ không tốt hơn để sử dụng phiên bản này? developer.mozilla.org/en-US/docs/JavaScript/Reference/,
Xavier Delamotte

1
@XavierDelamotte Bạn hoàn toàn chính xác. Trong khi phiên bản của tôi hoạt động, nó rất cơ bản và là một ví dụ. Mã của Mozilla an toàn hơn. (PS: Liên kết của bạn cũng nằm trong câu trả lời được chấp nhận)
Renaat De Muynck

137

Nếu bạn đang sử dụng Underscore.js, bạn có thể sử dụng _.size (cảm ơn @douwe):
_.size(obj)

Ngoài ra, bạn cũng có thể sử dụng _.key có thể rõ ràng hơn đối với một số:
_.keys(obj).length

Tôi đánh giá cao Underscore, đây là một thư viện chặt chẽ để làm nhiều việc cơ bản. Bất cứ khi nào có thể, chúng khớp ECMA5 và trì hoãn việc thực hiện riêng.

Nếu không, tôi ủng hộ câu trả lời của @ Avi. Tôi đã chỉnh sửa nó để thêm một liên kết đến tài liệu MDC bao gồm phương thức key () mà bạn có thể thêm vào các trình duyệt không phải ECMA5.


9
Nếu bạn sử dụng underscore.js thì bạn nên sử dụng _.size thay thế. Điều tốt là nếu bạn bằng cách nào đó chuyển từ mảng sang đối tượng hoặc ngược lại kết quả vẫn giữ nguyên.
douwe

2
Và theo hiểu biết của tôi, lodash thường tốt hơn gạch dưới (mặc dù họ làm những việc tương tự).
Merlyn Morgan-Graham

1
@ MerlynMorgan-Graham nếu tôi nhớ chính xác, lodash ban đầu là một nhánh của dấu gạch dưới ...
molson504x

6
_.keys(obj).lengthlàm việc tốt nhất cho tôi, bởi vì đối tượng trả về của tôi đôi khi là một chuỗi đơn giản không có thuộc tính bên trong nó. _.size(obj)trả lại cho tôi độ dài của chuỗi, trong khi _.keys(obj).lengthtrả về 0.
Jacob Stamm

Độ phức tạp O (n) . Lodash và Underscore sử dụng Object.keysnội bộ. Gạch dưới cũng sao chép mọi khóa vào một mảng bên trong một for..invòng lặp nếu Object.keyskhông được xác định.
N. Kudryavtsev

82

Việc triển khai Đối tượng tiêu chuẩn ( Các thuộc tính và phương thức bên trong đối tượng ES5.1 ) không yêu cầu Objectphải theo dõi số lượng khóa / thuộc tính của nó, do đó, không có cách tiêu chuẩn nào để xác định kích thước của một khóa Objectmà không lặp lại một cách rõ ràng hoặc ngầm định trên các khóa của nó.

Vì vậy, đây là những lựa chọn thay thế được sử dụng phổ biến nhất:

1. Object.keys của ECMAScript ()

Object.keys(obj).length;Hoạt động bằng cách lặp bên trong các phím để tính toán một mảng tạm thời và trả về độ dài của nó.

  • Ưu điểm - Cú pháp dễ đọc và rõ ràng. Không yêu cầu thư viện hoặc mã tùy chỉnh ngoại trừ shim nếu không có hỗ trợ riêng
  • Nhược điểm - Chi phí bộ nhớ do tạo ra mảng.

2. Giải pháp dựa trên thư viện

Nhiều ví dụ dựa trên thư viện ở những nơi khác trong chủ đề này là những thành ngữ hữu ích trong ngữ cảnh thư viện của họ. Tuy nhiên, từ quan điểm hiệu năng, không có gì để đạt được so với mã không có thư viện hoàn hảo vì tất cả các phương thức thư viện đó thực sự gói gọn một vòng lặp for hoặc ES5 Object.keys(gốc hoặc shimmed).

3. Tối ưu hóa một vòng lặp for

Phần chậm nhất của vòng lặp for như vậy thường là .hasOwnProperty()cuộc gọi, vì chức năng gọi qua chức năng. Vì vậy, khi tôi chỉ muốn số lượng mục nhập của một đối tượng JSON, tôi chỉ bỏ qua .hasOwnProperty()cuộc gọi nếu tôi biết rằng không có mã nào được thực hiện cũng sẽ không mở rộng Object.prototype.

Mặt khác, mã của bạn có thể được tối ưu hóa một chút bằng cách tạo klocal ( var k) và bằng cách sử dụng toán tử tăng tiền tố ( ++count) thay vì postfix.

var count = 0;
for (var k in myobj) if (myobj.hasOwnProperty(k)) ++count;

Một ý tưởng khác dựa vào bộ nhớ đệm hasOwnPropertyphương thức:

var hasOwn = Object.prototype.hasOwnProperty;
var count = 0;
for (var k in myobj) if (hasOwn.call(myobj, k)) ++count;

Điều này có nhanh hơn hay không trên một môi trường nhất định là một câu hỏi về điểm chuẩn. Hiệu suất rất hạn chế có thể được dự kiến ​​dù sao.


Tại sao sẽ var k in myobjtăng hiệu suất? Theo tôi biết, chỉ có các hàm khai báo phạm vi mới trong JavaScript. Là trong vòng lặp một ngoại lệ cho quy tắc này?
Lars Gyrup Brink Nielsen

1
Cái này có nhanh hơn không? for (var k in myobj) hasOwn.call(myobj, k) && ++count;tức là thay thế câu lệnh if bằng một đơn giản &&?
Hamza Kubba

Điều cuối cùng bạn có thể làm với : Object.getOwnPropertyNames(obj).length; đơn giản hơn nhiều
Héo

29

Nếu bạn thực sự gặp vấn đề về hiệu năng, tôi khuyên bạn nên gói các cuộc gọi thêm / xóa thuộc tính đến / từ đối tượng bằng một hàm cũng tăng / giảm một thuộc tính (kích thước?) Được đặt tên thích hợp.

Bạn chỉ cần tính toán số lượng tài sản ban đầu một lần và di chuyển từ đó. Nếu không có vấn đề hiệu suất thực tế, đừng bận tâm. Chỉ cần bọc bit đó trong một hàm getNumberOfProperties(object)và được thực hiện với nó.


4
@hitautodesturation Vì anh đưa ra giải pháp.
nghiền nát

@crush Câu trả lời này dường như gợi ý những việc cần làm hơn là đưa ra giải pháp trực tiếp.
cấu trúc hitautodest

5
@hitautodesturation nó gợi ý một câu trả lời: tăng / giảm số đếm được đóng gói với các phương thức thêm / xóa. Có một câu trả lời chính xác như thế này dưới đây. Sự khác biệt duy nhất là, Confusion không cung cấp bất kỳ mã nào. Câu trả lời không bắt buộc chỉ cung cấp giải pháp mã.
nghiền nát

1
nó có thể không hoàn hảo ... nhưng so với các "câu trả lời" khác thì đây có thể là giải pháp tốt nhất cho một số tình huống
d.raev

1
Cho đến nay, đây là giải pháp duy nhất tôi thấy đó là độ phức tạp hiệu suất thời gian không đổi O (1), và do đó là giải pháp duy nhất trả lời chi tiết Câu hỏi "không lặp lại" và do đó phải là Câu trả lời được chấp nhận. Hầu hết nếu không phải tất cả các câu trả lời khác không trả lời điều đó, bởi vì chúng cung cấp độ phức tạp hiệu suất thời gian tuyến tính O (n); đó cũng là trường hợp đối với các giải pháp 1 dòng gọi một hàm như hàm .keys (), vì các lệnh gọi hàm đó là O (n).
cellepo

17

Như tuyên bố của Avi Flax https://stackoverflow.com/a/4889658/1047014

Object.keys(obj).length

sẽ thực hiện thủ thuật cho tất cả các thuộc tính có thể đếm được trên đối tượng của bạn nhưng cũng bao gồm các thuộc tính không thể đếm được mà bạn có thể sử dụng Object.getOwnPropertyNames. Đây là sự khác biệt:

var myObject = new Object();

Object.defineProperty(myObject, "nonEnumerableProp", {
  enumerable: false
});
Object.defineProperty(myObject, "enumerableProp", {
  enumerable: true
});

console.log(Object.getOwnPropertyNames(myObject).length); //outputs 2
console.log(Object.keys(myObject).length); //outputs 1

console.log(myObject.hasOwnProperty("nonEnumerableProp")); //outputs true
console.log(myObject.hasOwnProperty("enumerableProp")); //outputs true

console.log("nonEnumerableProp" in myObject); //outputs true
console.log("enumerableProp" in myObject); //outputs true

Như đã nêu ở đây, điều này có hỗ trợ trình duyệt tương tự nhưObject.keys

Tuy nhiên, trong hầu hết các trường hợp, bạn có thể không muốn bao gồm số lượng không thể đếm được trong các loại hoạt động này, nhưng thật tốt khi biết sự khác biệt;)


1
Đồng ý với việc đề cập Object.getOwnPropertyNames, bạn là người duy nhất ở đây ...
Héo

15

Tôi không biết cách nào để làm điều này, tuy nhiên để giữ các lần lặp ở mức tối thiểu, bạn có thể thử kiểm tra sự tồn tại của __count__nó và nếu nó không tồn tại (tức là không phải Firefox) thì bạn có thể lặp lại đối tượng và xác định nó để sử dụng sau này, vd:

if (myobj.__count__ === undefined) {
  myobj.__count__ = ...
}

Bằng cách này, bất kỳ trình duyệt hỗ trợ __count__nào cũng sẽ sử dụng điều đó và việc lặp lại sẽ chỉ được thực hiện cho những người không sử dụng. Nếu số lượng thay đổi và bạn không thể làm điều này, bạn luôn có thể biến nó thành một hàm:

if (myobj.__count__ === undefined) {
  myobj.__count__ = function() { return ... }
  myobj.__count__.toString = function() { return this(); }
}

Cách này bất cứ lúc nào bạn tham khảo myobj. __count__chức năng sẽ bắn và tính toán lại.


13
Lưu ý rằng Object.prototype.__count__đang bị xóa trong Gecko 1.9.3: whereeswalden.com 2010/04/06 / Số đếm -property-of-object-is-
be

17
Bây giờ Firefox 4 đã hết, câu trả lời này đã lỗi thời. Object.__count__đã biến mất, và câu đố tốt quá.
Yi Jiang

1
Tôi sẽ không nói câu trả lời là lỗi thời. Đây vẫn là một chiến lược thú vị để gói gọn một giá trị trong hàm.
devios1

nên sử dụng đối tượng nguyên mẫu để mở rộng
Aaria Carter-Weir

13

Để lặp lại trên Avi Flax trả lời Object.keys (obj) .length là chính xác cho một đối tượng không có chức năng gắn liền với nó

thí dụ:

obj = {"lol": "what", owo: "pfft"};
Object.keys(obj).length; // should be 2

đấu với

arr = [];
obj = {"lol": "what", owo: "pfft"};
obj.omg = function(){
    _.each(obj, function(a){
        arr.push(a);
    });
};
Object.keys(obj).length; // should be 3 because it looks like this 
/* obj === {"lol": "what", owo: "pfft", omg: function(){_.each(obj, function(a){arr.push(a);});}} */

các bước để tránh điều này:

  1. không đặt các chức năng trong một đối tượng mà bạn muốn đếm số lượng khóa trong

  2. sử dụng một đối tượng riêng biệt hoặc tạo một đối tượng mới dành riêng cho các hàm (nếu bạn muốn đếm có bao nhiêu hàm có trong tệp bằng cách sử dụng Object.keys(obj).length)

cũng có, tôi đã sử dụng mô-đun _ hoặc gạch dưới từ nodejs trong ví dụ của tôi

tài liệu có thể được tìm thấy ở đây http://underscorejs.org/ cũng như nguồn của nó trên github và nhiều thông tin khác

Và cuối cùng là triển khai lodash https://lodash.com/docs#size

_.size(obj)


Đáp lại ý kiến ​​của bạn về Array(obj).length: Nó không hoạt động. http://jsfiddle.net/Jhy8M/
Jamie Chong

vâng tôi đã xem xét thêm một chút nữa tôi sẽ loại bỏ câu trả lời này nếu có thể hoặc chỉ chỉnh sửa tất cả cùng nhau
Belldandu

Tôi không thấy rằng điều này có liên quan đến các chức năng, đối với một người và trong Chrome tôi hoàn toàn không thấy hành vi này. Tôi nghi ngờ điều này có thể đã xảy ra với hành vi mặc định của Object.defineProperty (): có thể đếm được false, mặc dù tôi chưa tìm thấy bất kỳ tài liệu nào về cách var obj = { a: true, b: true }có thể khác var obj = {}; obj.a = true; obj.b = true;hoặc đơn giản nếu một cách hiểu / ngữ nghĩa khác nhau của W3 có đã được Chrome chấp nhận.
Nolo

10

như đã trả lời ở trên: Object.keys(obj).length

Nhưng: như bây giờ chúng ta đã có một lớp Map thực sự trong ES6, tôi sẽ đề nghị sử dụng nó thay vì sử dụng các thuộc tính của một đối tượng.

const map = new Map();
map.set("key", "value");
map.size; // THE fastest way

8

Đối với những người có Underscore.js trong dự án của họ, bạn có thể làm:

_({a:'', b:''}).size() // => 2

hoặc phong cách chức năng:

_.size({a:'', b:''}) // => 2

8

Dưới đây là một số bài kiểm tra hiệu suất cho ba phương pháp;

https://jsperf.com/get-the-number-of-keys-in-an-object

Object.keys (). Chiều dài

20.735 thao tác mỗi giây

Rất đơn giản và tương thích. Chạy nhanh nhưng tốn kém vì nó tạo ra một loạt các phím mới, sau đó bị vứt đi.

return Object.keys(objectToRead).length;

lặp qua các phím

15.734 hoạt động mỗi giây

let size=0;
for(let k in objectToRead) {
  size++
}
return size;

Hơi chậm hơn một chút, nhưng không nơi nào sử dụng bộ nhớ, vì vậy có lẽ tốt hơn nếu bạn quan tâm đến việc tối ưu hóa cho thiết bị di động hoặc các máy nhỏ khác

Sử dụng Bản đồ thay vì Đối tượng

953.839.338 hoạt động mỗi giây

return mapToRead.size;

Về cơ bản, Bản đồ theo dõi kích thước của chính nó để chúng tôi chỉ trả về một trường số. Xa, nhanh hơn bất kỳ phương pháp nào khác. Nếu bạn có quyền kiểm soát đối tượng, thay đổi chúng thành bản đồ thay thế.


6

Từ: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

Object.defineProperty (obj, prop, mô tả)

Bạn có thể thêm nó vào tất cả các đối tượng của mình:

Object.defineProperty(Object.prototype, "length", {
    enumerable: false,
    get: function() {
        return Object.keys(this).length;
    }
});

Hoặc một đối tượng:

var myObj = {};
Object.defineProperty(myObj, "length", {
    enumerable: false,
    get: function() {
        return Object.keys(this).length;
    }
});

Thí dụ:

var myObj = {};
myObj.name  = "John Doe";
myObj.email = "leaked@example.com";
myObj.length; //output: 2

Đã thêm theo cách đó, nó sẽ không được hiển thị trong vòng lặp..trong vòng:

for(var i in myObj) {
     console.log(i + ":" + myObj[i]);
}

Đầu ra:

name:John Doe
email:leaked@example.com

Lưu ý: nó không hoạt động trong trình duyệt <IE9.


Nếu bạn sẽ mở rộng các nguyên mẫu tích hợp hoặc polyfill một thuộc tính (ví dụ như bản vá khỉ), vui lòng thực hiện chính xác: để tương thích về phía trước, kiểm tra xem thuộc tính có tồn tại trước không, sau đó làm cho thuộc tính không thể đếm được để các khóa riêng của các đối tượng xây dựng không bị ô nhiễm. Đối với phương pháp sử dụng phương pháp thực tế . Đề xuất của tôi: làm theo các ví dụ này minh họa cách thêm một phương thức hoạt động gần nhất có thể như các phương thức tích hợp.
user4642212

5

Cách tôi giải quyết vấn đề này là xây dựng một danh sách cơ bản của riêng tôi để lưu bản ghi về số lượng mục được lưu trữ trong đối tượng. Nó rất đơn giản. Một cái gì đó như thế này:

function BasicList()
{
   var items = {};
   this.count = 0;

   this.add = function(index, item)
   {
      items[index] = item;
      this.count++;
   }

   this.remove = function (index)
   {
      delete items[index];
      this.count--;
   }

   this.get = function(index)
   {
      if (undefined === index)
        return items;
      else
        return items[index];
   }
}

1
Thú vị thay thế. Điều này không loại bỏ chi phí của hàm đếm tổng hợp, nhưng với chi phí của hàm gọi mỗi khi bạn thêm hoặc xóa một phần tử, điều không may có thể tồi tệ hơn. Tôi muốn sử dụng cách thực hiện danh sách như vậy cho việc đóng gói dữ liệu và phương thức tùy chỉnh mà nó có thể cung cấp so với một mảng đơn giản, nhưng không phải khi tôi chỉ cần đếm mục nhanh.
Luc125

1
Tôi thích câu trả lời của bạn, nhưng tôi cũng là một người khó tính và nhấp chuột lên. Điều này trình bày một vấn đề nan giải thú vị. Bạn không hạch toán một số hành vi trong hướng dẫn của bạn, chẳng hạn như tình huống của tôi khi tôi đã nâng cao câu trả lời của bạn, nhưng sau đó tôi được hướng dẫn "nhấp vào upvote" và không thể. Hướng dẫn thất bại âm thầm nhưng tôi thu thập từ nội dung của bạn ở đây trên SO rằng thất bại âm thầm không phải là điều bạn thích mã của bạn đang làm. Chỉ cần một cái đầu lên.
L0j1k

1
Tôi thực sự thích câu trả lời này, cấu trúc dữ liệu tốt đẹp. Và nếu có tác động hiệu năng với các lệnh gọi chức năng, thì sẽ có hiệu suất tăng cao hơn nhiều nếu phải lặp lại trên một đối tượng. Điều này sẽ cho phép patten vòng lặp nhanh nhấtvar i = basiclist.count while(i--){...}
Lex

Không nên có một danh sách cơ bản ít nhất bao gồm kiểm tra cơ bản? Giống như kiểm tra nếu addthay thế một mục cũ hoặc nếu removeđược gọi bằng một chỉ mục không tồn tại. Ngoài ra, không thể kiểm tra xem danh sách có chỉ mục đã cho hay không nếu undefinedlà giá trị mục hợp lệ.
Robert

2
Một danh sách nên được sắp xếp và lặp đi lặp lại. Dữ liệu được lưu trữ trong một đối tượng nên không có gì đảm bảo về thứ tự các yếu tố. Làm thế nào để bạn tìm thấy chiều dài một danh sách có lỗ trong đó? cái này Giá trị chỉ số cao nhất? Nếu bạn thêm hai mục vào cùng một chỉ mục, số đếm sẽ chuyển sang trạng thái lỗi.
Ultimate Gobblement

4

Bạn có thể sử dụng Object.keys(data).lengthđể tìm độ dài của đối tượng JSON có dữ liệu chính


3

Đối với những người có Ext JS 4 trong dự án của họ, bạn có thể làm:

Ext.Object.getSize(myobj);

Ưu điểm của việc này là nó sẽ hoạt động trên tất cả các trình duyệt tương thích Ext (bao gồm IE6-IE8), tuy nhiên, tôi tin rằng thời gian chạy không tốt hơn O (n), như với các giải pháp được đề xuất khác.


2

Bạn có thể dùng:

Object.keys(objectName).length; 

Object.values(objectName).length;

1

OP không chỉ định nếu đối tượng là một nodeList, nếu có thì bạn chỉ có thể sử dụng phương thức length trên nó trực tiếp. Thí dụ:

buttons = document.querySelectorAll('[id=button)) {
console.log('Found ' + buttons.length + ' on the screen'); 

0

Nếu jQuery ở trên không hoạt động, thì hãy thử

$(Object.Item).length

3
Dường như điều Object.Itemđó không tồn tại
Luc125

-1

Tôi không nghĩ rằng điều này là có thể (ít nhất là không sử dụng một số nội bộ). Và tôi không nghĩ bạn sẽ đạt được nhiều bằng cách tối ưu hóa điều này.


2
Câu trả lời được chấp nhận cho thấy rằng điều này có thể được thực hiện và bạn không có ngữ cảnh để khẳng định rằng không có gì để đạt được.
Ống luồn dây

-1

Tôi cố gắng làm cho nó có sẵn cho tất cả các đối tượng như thế này:

Object.defineProperty(Object.prototype, "length", {
get() {
    if (!Object.keys) {
        Object.keys = function (obj) {
            var keys = [],k;
            for (k in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, k)) {
                    keys.push(k);
                }
            }
            return keys;
        };
    }
    return Object.keys(this).length;
},});

console.log({"Name":"Joe","Age":26}.length) //returns 2

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.