Mỗi khi có ai đề cập đến thử nghiệm đối với undefined
, it's pointed out thì undefined
không phải là từ khóa để it could be set to "hello"
, vì vậy, you should usetypeof x == "undefined"
thay thế. Điều này có vẻ vô lý đối với tôi. Không ai có thể làm điều đó, và nếu họ đã làm nó sẽ là lý do đủ để không bao giờ sử dụng bất kỳ mã họ đã viết ... phải không?Làm thế nào nguy hiểm trong JavaScript, thực sự, giả định không xác định không bị ghi đè?
tôi thấy one example của một ai đó vô tình thiết lập undefined
để null
, và điều này đã được đưa ra như một lý do để tránh giả định rằng undefined
không bị ghi đè. Nhưng nếu họ làm thế, con bọ sẽ không bị phát hiện, và tôi không thấy nó tốt hơn thế nào.
Trong C++, mọi người đều ý thức được rằng nói pháp lý là #define true false
, nhưng không ai khuyên bạn tránh sử dụng true
và sử dụng 0 == 0
thay thế. Bạn chỉ cần giả định rằng không ai có thể là một người giật đủ lớn để làm điều đó, và nếu họ làm, không bao giờ tin tưởng mã của họ một lần nữa.
Đã bao giờ thực sự cắn ai đó mà người khác được giao cho undefined
(có mục đích) và nó đã phá vỡ mã của bạn, hay đây là một mối đe dọa giả định hơn? Tôi sẵn sàng tận dụng cơ hội để làm cho mã của tôi dễ đọc hơn. Đây có phải là một ý tưởng thực sự tồi không?
Để nhắc lại, tôi là không phải yêu cầu cách bảo vệ chống lại việc gán lại chưa được xác định. Tôi đã nhìn thấy những thủ thuật được viết 100 lần rồi. Tôi hỏi làm thế nào nguy hiểm là không sử dụng những thủ thuật.
Tôi sẽ rất vui, nhưng tôi không cảm thấy như bất kỳ câu trả lời nào trong ba câu trả lời đều là một công việc tốt trong việc trả lời câu hỏi. Tôi đã cố gắng để làm cho nó rõ ràng tôi đã không yêu cầu cho một rehash của câu trả lời tôi liên kết với, nhưng đó vẫn là những gì tôi có. Nếu nó được coi là gauche không chấp nhận một câu trả lời ngay cả khi nó không phải là những gì tôi đã yêu cầu, cho tôi biết và tôi sẽ đi trước và chấp nhận một! – Cosmologicon
Tôi nghĩ rằng tất cả các sự kiện được đặt ra ở đây, mặc dù. Vì vậy, những gì bạn đang nói là bạn muốn có một câu trả lời chủ quan hoặc ý kiến thay vào đó, mà chỉ dẫn đến sự bất đồng. Đó là lý do cụm từ "thực hành tốt nhất" không được phép trong tiêu đề câu hỏi. Bạn là người duy nhất có thể biết mức độ nguy hiểm trong kịch bản của bạn.Và nếu bạn đang viết một thư viện phổ biến mà bạn không kiểm soát tất cả các 'biến', hàm wrapper (undefined) {} có vẻ là một câu trả lời xuất sắc. Tại sao không sử dụng nó và chấp nhận câu trả lời đó? – shannon
Nếu ai đó lo lắng về việc ai đó định nghĩa lại 'undefined', bạn nên lo lắng nhiều hơn về việc ai đó định nghĩa lại 'XMLHttpRequest' hoặc' alert'. Tất cả các hàm chúng ta sử dụng từ 'window' có thể đã được định nghĩa lại. Và nếu bạn chỉ lo lắng về một đồng nghiệp làm điều đó một cách tình cờ, tại sao tin tưởng họ không làm 'window.addEventListener =" coolbeans "'? Câu trả lời là không phải lo lắng về bất kỳ điều đó. Nếu ai đó đang tiêm chích JS một cách độc hại vào trang của bạn thì bạn vẫn bị hosed. Làm việc để ngăn chặn * rằng * xảy ra ở nơi đầu tiên. –