2016-08-08 18 views
7

Các ghi đè tùy chọn cho isFunction(object) trong Underscore.js (repo link to definition), đọc như sau:Underscore.js, tại sao `isFunction` sử dụng` || sai`?

// Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, 
// IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). 
var nodelist = root.document && root.document.childNodes; 
if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') { 
    _.isFunction = function(obj) { 
     return typeof obj == 'function' || false; 
    }; 
} 

Những gì tôi là nhầm lẫn về là || false, tại sao nó cần thiết sau một so sánh chuỗi? Vì typeof luôn trả về một chuỗi nên không có sự mơ hồ?
Nhận xét nêu rõ sửa lỗi ghi đè một số lỗi typeof, có trường hợp nào trên các nền tảng được liệt kê khi typeof không trả lại chuỗi không?

Trả lời

6

Xem các vấn đề được đề cập trong các nhận xét, #1621, #1929#2236.

Một thời gian ngắn, một số nền tảng có lỗi trong đó typeof không phải là chuỗi trừ khi bạn lưu trữ nó trong một biến.
Các || false khắc phục sự cố mà không đưa ra thêm biến.

Taken trực tiếp từ #1621:

Trong IE8, với tất cả mọi thứ biến tác phẩm như mong đợi:

var t = typeof obj 
t === 'function' // false 
t === 'object' // true 

nhưng không có một, mọi thứ đều khác nhau:

(typeof obj) === 'function' // true, but SHOULD be false 
(typeof obj) === 'object' // true 

Vui lòng cung thêm phác thảo ở trên sửa lỗi.

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