Tôi đã nhìn vào mã nguồn cho các thư viện Underscore.js, đặc biệt là đối với phương pháp map (khoảng dòng 85 trên trang đó, và sao chép ở đây):độ dài đối tượng phủ định có thể có trong JavaScript hoặc underscore.js? Ý nghĩa?
_.map = function(obj, iterator, context) {
var results = [];
if (obj == null) return results;
if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
each(obj, function(value, index, list) {
results[results.length] = iterator.call(context, value, index, list);
});
if (obj.length === +obj.length) results.length = obj.length;
return results;
};
hoàn toàn đơn giản TRỪ cho dòng sau
if (obj.length === +obj.length) results.length = obj.length;
Bây giờ, tôi đọc điều này có nghĩa là "nếu chiều dài đối tượng không phải là số âm ..."
, nếu diễn giải của tôi là đúng, ngụ ý rằng nó có thể!
Vì vậy, các chuyên gia thân yêu, cho những gì loại của các đối tượng có thể
obj.length === +obj.length
được false
? Sự hiểu biết của tôi về ===
có nghĩa là nó có thể trả lại false
nếu loại obj.length
không khớp với loại +obj.length
, nhưng ở đây kiến thức của tôi không đủ. Những thứ gì có thể +
có thể làm với những thứ mà obj.length
có thể là? Có phải là x === +x
một số loại thử nghiệm thành ngữ chung mà tôi không biết? Có phải nó phản ứng với một số trường hợp đặc biệt phát sinh sâu hơn trong underscore.js, ví dụ: underscore.js có gán và theo dõi đối tượng phủ định.độ dài cho một số mục đích thông thường không? Hướng dẫn và tư vấn sẽ được đánh giá cao.
Lưu ý rằng '+ x' là * không * nhất thiết là dương - nó chỉ là giá trị số của' x'. Vì vậy, nếu 'var x = -10',' + x' cũng là '-10'. –
Có, nhận ra rằng + x không làm bất cứ điều gì với giá trị của x (không tăng tạm thời để so sánh). – grantwparks