2015-01-13 14 views

Trả lời

10

Ngữ pháp cho instanceof là:

RelationalExpression instanceof ShiftExpression 

mỗi ECMA-262 §11.8.

Dấu chấm câu { khi bắt đầu câu lệnh được xem là khởi đầu của một khối, do đó, } sau đóng khối và kết thúc câu lệnh.

Toán tử instanceof sau đây là khởi đầu của câu lệnh tiếp theo, nhưng nó không thể ở đầu vì nó phải đứng trước RelationalExpression, do đó trình phân tích cú pháp sẽ gây bất ngờ.

Bạn cần bắt buộc {} để được xem như là một đối tượng bằng cách đặt một thứ khác vào đầu câu lệnh, ví dụ:

({}) instanceof Object 
+1

Đây là một lời giải thích tuyệt vời dude (+1). Cảm ơn ! – Christos

1

Nếu bạn cố gắng này:

var a = {} 
a instanceof Object 

đầu ra true, đó là sản lượng dự kiến.

Tuy nhiên, trong trường hợp của bạn

{} instanceof Object 

Ở trên không kết quả đầu ra sự thật.

Sau không phải là giống như số đầu tiên. Trong trường hợp đầu tiên, chúng ta tạo ra một đối tượng theo nghĩa đen, trong trường hợp thứ hai chúng ta không làm. Do đó bạn nhận được lỗi này.

+0

Umm ... Nhưng tại sao nó gặp khó khăn ở các nhà điều hành. Tại sao nó thậm chí không nhận ra các nhà điều hành? – balteo

+0

@balteo '{}' Đây không phải là toán tử trong JavaScript. Chúng ta có thể đặt bên trong '{}' cặp khóa/giá trị để tạo một đối tượng. Đó là cách ngắn nhất để tạo một đối tượng trong JavaScript. Nó không giống như toán tử lời gọi '()', mà khi được nối thêm sau một biểu thức hàm, biểu thức này sẽ được thực hiện hoặc giống như toán tử '+' và vv. – Christos

+0

Tôi có nghĩa là tại sao nó balk tại nhà điều hành 'instanceof'? – balteo

1

Hãy thử

var p = {} 
p instanceof Object 
3

{}, trong bối cảnh đó, là một khối, không phải là một đối tượng chữ.

Bạn cần thay đổi ngữ cảnh (ví dụ: bằng cách gói nó trong ()) để biến nó thành một đối tượng theo nghĩa đen.

({}) instanceof Object; 
+0

Cảm ơn Quentin: nó hoạt động. Nhưng bạn có thể giải thích lý do tại sao các nhà điều hành không được công nhận? Tại sao thông báo lỗi này? – balteo

+1

@balteo - Vì bạn đang đặt nó sau một khối mã thay vì một đối tượng. – Quentin

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