Các getVarType phương pháp (dưới đây) làm việc cho gần như tất cả các biến. Check out this fiddle. Đầu tiên nó sử dụng loại rất nhanh cho các trường hợp kết quả đáng tin cậy. Sau đó, nó sử dụng phương pháp toString tốn kém hơn cho các trường hợp khác. Cuối cùng, nếu nó đang xử lý một đối tượng được đặt tên (như được trả về bởi Firefox cho các đối tượng như document.location), nó sẽ kiểm tra các đối tượng giống như mảng và báo cáo chúng như các mảng.
Để so sánh, typeof thật đáng xấu hổ. typeof ([]) trả về đối tượng '', typeof (new Number()) trả về đối tượng. Nó cũng trả về 'đối tượng' cho nhiều biến khác không phải là đối tượng thực tế. Xem kết quả fiddle để so sánh.
// Begin public utility /getVarType/
// Returns 'Function', 'Object', 'Array',
// 'String', 'Number', 'Null', 'Boolean', or 'Undefined'
//
getVarType = (function() {
var typeof_map = {
'undefined' : 'Undefined',
'boolean' : 'Boolean',
'number' : 'Number',
'string' : 'String',
'function' : 'Function',
'Undefined' : 'Undefined',
'Null' : 'Null',
'Boolean' : 'Boolean',
'Number' : 'Number',
'String' : 'String',
'Function' : 'Function',
'Array' : 'Array',
'StyleSheetList' : 'Array'
};
return function(data) {
var type, type_str;
if (data === null ) { return 'Null'; }
if (data === undefined) { return 'Undefined'; }
type = typeof(data);
type_str = typeof_map[ type ];
if (type_str) { return type_str; }
type = {}.toString.call(data).slice(8, -1);
return typeof_map[ type ]
|| (data instanceof Array ? 'Array' :
(data.propertyIsEnumerable(0) && data.length !== undefined
? 'Array' : 'Object')
);
};
}());
// End public utility /getVarType/
Chế độ lỗi duy nhất có thể xảy ra nếu bạn đang thử nghiệm một mảng được đặt tên trống (ví dụ:một đối tượng DOM enumerable rỗng bên cạnh StyleSheetList). Nhưng trên có thể thêm những người vào type_of_map khi cần thiết.
Tôi hy vọng điều đó sẽ hữu ích!
Nguồn
2013-07-11 01:27:41
Vì chuỗi ký tự không phải là đối tượng của loại 'Chuỗi'. Xem 'typeof capitalized' – zerkms