2010-05-09 45 views
54

Trong JavaScript typeof là một toán tử và một hàm. Nó được sử dụng tốt hơn như một toán tử hay một hàm? Tại sao?typeof là một toán tử và một hàm

+2

Chủ đề tắt bit: Thực tế, hiếm khi tôi sử dụng 'loại' trong những ngày này. AFAIK, 'typeof' chậm hơn kiểm tra trực tiếp, vì nó cần kiểm tra nhiều loại khác nhau để trả về một chuỗi. Do đó, tôi luôn luôn kiểm tra hàm tạo (nếu có thể), giống như 'if ((" hello "). Constructor == String) {...}' –

+2

@Sune Rasmussen - Từ hồ sơ giới hạn mà tôi vừa làm, kiểm tra hàm tạo trong Firefox 3.6 chậm gấp hai lần như 'typeof'. Tôi đã có một 'var func = function() {};' và sau đó tôi đã thực hiện cả kiểm tra 'typeof func! =" Function "' cũng như kiểm tra 'func.constructor! = Function'. Trước đây nhanh gấp hai lần. – JulianR

+0

Nếu bạn sử dụng jQuery, thời gian thực hiện của 'typeof' là không đáng kể. –

Trả lời

165

typeof là một toán tử. Bạn có thể dễ dàng kiểm tra nó bằng cách sử:

typeof(typeof) 

Were typeof một chức năng, biểu hiện này sẽ quay trở lại 'function' chuỗi, nhưng nó kết quả trong một lỗi cú pháp:

js> typeof(typeof); 
typein:8: SyntaxError: syntax error: 
typein:8: typeof(typeof); 
typein:8: .............^ 

vậy, typeof không thể là một chức năng. Có thể là dấu ngoặc đơn typeof(foo) khiến bạn nghĩ rằng typeof là một hàm, nhưng cú pháp, các dấu ngoặc đơn đó không phải là gọi hàm - chúng là những thứ được sử dụng để nhóm, giống như (2 + 3) *2. Trên thực tế, bạn có thể thêm bất kỳ số nào trong số họ muốn:

typeof(((((foo))))); // is equal to typeof foo; 
+3

Lưu ý điều này đúng với các toán tử khác - '[] instanceof (Object)'. –

5

Tôi nghĩ rằng bạn chọn mà bạn muốn dựa trên sự rõ ràng, như một thói quen tôi thường sử dụng nó như một nhà điều hành theo cách sau vì nó khá rõ ràng, ít nhất là IMO:

if(typeof thing === "string") { 
    alert("this is a string"); 
} 

if(typeof thing === "function") { 
    alert("this is a function"); 
} 

này trái ngược với này định dạng:

if(typeof(thing) === "string") { 
    alert("this is a string"); 
} 

Mà với tôi, làm cho nó hơi chậm hơn để đọc. Nếu bạn làm typeof(thing) thì đó là điều tương tự, vì vậy bất cứ điều gì nổi thuyền của bạn. You can get a full read and what strings to expect from types here.

+0

Vì vậy, không có cách nào hiểu rõ hơn? Có tồn tại một hướng dẫn kiểu JavaScript? – hekevintran

+0

@hekevintran - Không có một hướng dẫn tiêu chuẩn cụ thể cho tất cả mọi người, bạn có thể tìm thấy một khuôn khổ lớn và trưởng thành và theo phong cách của nó, như jQuery hay Prototype ... nhưng lại là những phong cách của nhóm đó, "Tiêu chuẩn". –

+0

địa ngục đẫm máu, tôi đã không biết về việc có thể chỉ định sans "()" của. –

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