2016-09-11 20 views
5

Tại sao có những 2 điều kiện khác nhau:Các điều kiện này khác nhau như thế nào?

Sai:

if (myObj !== null && typeof myObj !== "undefined") 

Bởi vì điều này, bạn phải kiểm tra typeof() đầu tiên:

Đúng:

if (typeof myObj !== "undefined" && myObj !== null) 

Tôi kéo này ngoài trang web w3schools. Theo w3schools bạn phải kiểm tra typeof() trước tiên, tại sao điều này lại tạo nên sự khác biệt. Các điều kiện trông giống như

+7

Đây là một ví dụ tuyệt vời về lý do tại sao thông tin w3schools nên được thực hiện với một hạt muối. – Pointy

+2

Nó không giống nhau bởi vì && toán tử ngắn mạch: điều kiện thứ hai không được đánh giá khi điều kiện đầu tiên bị lỗi. – raina77ow

+2

Vì nếu 'myObj' không được xác định, bạn sẽ gặp lỗi nếu trước tiên bạn không kiểm tra bằng typeof. – adeneo

Trả lời

6

Điều kiện đầu tiên sẽ ném lỗi nếu biến không được khai báo.

ReferenceError: myObj is not defined

Lưu ý rằng các nhà điều hành & & là ngắn mạch, vì vậy trong điều kiện thứ hai, khái niệm myObj !== null sẽ không được đánh giá ở tất cả nếu myObj là undefined.

Xem here để biết chi tiết.

+1

Nó sẽ ném một lỗi nếu đối tượng là * undeclared *; nó có thể được tuyên bố và không có giá trị, tuy nhiên, và nó sẽ không ném một lỗi sau đó. – Pointy

+0

Tuy nhiên câu trả lời của tôi là sai anyway; Tôi nghĩ rằng tôi cần một giấc ngủ ngắn :) – Pointy

+0

@Pointy bạn đúng, không khai báo là từ chính xác để sử dụng. Tôi đã chỉnh sửa câu trả lời của mình. –

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