Tôi hiểu tại sao bạn cần phải sử dụng Object.prototype.toString()
hoặc String()
cho các mảng đánh máy, nhưng không phải là typeof đủ cho các chức năng và chuỗi đánh máy? Ví dụ polyfill trên MDN cho Array.isArray sử dụng:Tại sao sử dụng toString() để đánh máy args rằng bạn có thể kiểm tra với typeof?
Object.prototype.toString.call(arg) == '[object Array]';
Nó khá rõ ràng trong trường hợp mảng bởi vì bạn không thể sử dụng typeof
để kiểm tra các mảng. Valentine sử dụng instanceof cho việc này:
ar instanceof Array
Nhưng đối với chuỗi/chức năng/boolean/số, tại sao không sử dụng typeof
?
jQuery và Underscore đều sử dụng một cái gì đó như thế này để kiểm tra các chức năng:
Object.prototype.toString.call(obj) == '[object Function]';
Mà không phải là tương đương với làm điều này?
typeof obj === 'function'
hoặc thậm chí điều này?
obj instanceof Function
Lưu ý rằng nó không hoạt động với Promises, ít nhất là trong Chrome trong Firefox. 'typeof mypromise === 'object',' toString.call (mypromise) ===' [Object] '', nhưng' mypromise instanceof Promise === true' – Hurelu