2013-04-05 29 views
29

Có sự khác biệt nào giữa typeof (myVariable) so với typeof myVariable không?Tại sao "typeof" không cần dấu ngoặc đơn?

Cả hai công việc, nhưng đến từ PHP, tôi không hiểu tại sao chức năng này có thể sử dụng dấu ngoặc đơn hay không.

+1

Nó không phải là một chức năng. –

+1

Để thêm, nó là toán tử tương tự như '+' hoặc '-' https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof –

+0

Bởi vì' typeof' là toán tử, không phải một hàm. – jmoerdyk

Trả lời

44

Từ khóa typeof đại diện cho một nhà điều hành trong Javascript lập trình.

Định nghĩa chính xác cho typeof điều hành trong specification là:

typeof[(]expression[)] ; 

Đây là lý do đằng sau việc sử dụng typeof như typeof(expression) hoặc typeof expression.

Đến với lý do tại sao nó đã được triển khai như vậy có thể để cho nhà phát triển xử lý mức độ hiển thị trong mã của anh ấy. Như vậy, chúng ta có thể sử dụng một tuyên bố có điều kiện sạch sử dụng typeof:

if (typeof myVar === 'undefined') 
    // ... 
; 

Hoặc nêu một biểu thức phức tạp hơn bằng cách sử dụng () vì lợi ích của khả năng đọc:

var isTrue = (typeof (myVar = anotherVar) !== 'undefined') && (myVar === true)); 

EDIT:

Trong một số trường hợp, sử dụng dấu ngoặc đơn với toán tử typeof làm cho mã được viết ít dễ bị mơ hồ hơn.

Lấy ví dụ biểu thức sau đây mà toán tử typeof được sử dụng mà không có dấu ngoặc đơn. typeof sẽ trả về loại kết quả của phép nối giữa một chuỗi ký tự trống và một số hay kiểu chuỗi ký tự?

typeof "" + 42 

Nhìn vào định nghĩa của các nhà điều hành đã nêu ở trên và precedence of the operators typeof and +, dường như sự biểu hiện trước đó là tương đương với:

typeof("") + 42 // Returns the string `string42` 

Trong trường hợp này, sử dụng dấu ngoặc đơn với typeof sẽ mang lại cho rõ ràng hơn để những gì bạn đang cố gắng thể hiện:

typeof("" + 42) // Returns the string `string` 
Các vấn đề liên quan