2015-10-05 20 views
7

Theo MDN:Tại sao ES6 xác định map.length == 0?

Map.length

Giá trị của thuộc tính length là 0.

là gì trường hợp sử dụng cho việc này? Tôi hiểu tại sao Map.size là ngữ nghĩa chính xác. Nhưng chắc chắn là Map.length hầu như luôn trả về câu trả lời "sai" là một ý tưởng tồi, đặc biệt nếu có mã di chuyển giám sát từ ES5. Có cách nào để buộc một lỗi khi điều này được sử dụng?

+0

[Đây cũng là phần liên quan của thông số kỹ thuật] (http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-constructor) –

+6

Nó nói ' Map.length' là '0'. Không phải là thuộc tính '.length' của' new Map() 'là' 0'. Hãy thử: 'var m = new Map(); console.log (m.length, m.size, Map.length); '. –

+1

Vẫn không giải thích được tại sao * 'Map.length === 0'. –

Trả lời

15

Các hàm tạo trong JavaScript là các hàm bình thường và thuộc tính length của hàm tương ứng với số tham số chính thức mà hàm này mong đợi, bằng 0 trong trường hợp Map.

Tương phản điều này với RegExp.length, là 2, bởi vì hàm tạo RegExp mong đợi hai tham số (mẫu và cờ).

+0

Tuy nhiên, điều này không hoàn toàn phù hợp, vì tham số 'flags' thành' RegExp' là tùy chọn, như 'iterable' thành' Map', vì vậy 'Map.length' phải là 1 bởi logic đó? –

+3

@JamesThorpe Trên thực tế các chức năng gốc - không giống như các hàm do người dùng định nghĩa - thậm chí không có định nghĩa chính thức, và do đó thuộc tính 'length' được chỉ định đơn giản theo tiêu chuẩn ECMAScript, và đặc điểm kỹ thuật này chắc chắn có thể giải quyết các vấn đề về tính tương thích mối quan tâm. Các _spirit_, mặc dù, là như nhau. –

+0

@JamesThorpe FWIW: Thông số mô tả nó là _ "số đối số tiêu biểu được mong đợi bởi hàm" _ – zeroflagL

Các vấn đề liên quan