Câu trả lời ngắn
Việc đặt cược an toàn nhất là undefined
, và nên làm việc gần như ở khắp nơi. Cuối cùng, mặc dù, bạn không thể lừa chức năng được gọi là suy nghĩ bạn thực sự bỏ qua một tham số.
Nếu bạn thấy mình nghiêng về phía sử dụng null
chỉ vì nó ngắn hơn, hãy xem xét tuyên bố một biến tên là _
như một cách viết tắt tốt đẹp cho undefined
:
(function() { // First line of every script file
"use strict";
var _ = undefined; // For shorthand
// ...
aFunction(a, _, c);
// ...
})(); // Last line of every script
Chi tiết
Đầu tiên, hãy biết rằng:
typeof undefined
đánh giá là "undefined"
typeof null
đánh giá để "object"
Vì vậy, giả sử một chức năng có một cuộc tranh cãi rằng nó hy vọng sẽ là kiểu "number"
. Nếu bạn cung cấp null
làm giá trị, bạn sẽ cung cấp cho nó "object"
. Các ngữ nghĩa đang tắt.
Như nhà phát triển tiếp tục viết mã javascript ngày càng mạnh mẽ, có một cơ hội tăng rằng các chức năng bạn gọi một cách rõ ràng kiểm tra giá trị của một tham số cho undefined
như trái ngược với cổ điển if (aParam) {...}
. Bạn sẽ ở trên nền tảng không ổn định nếu bạn tiếp tục sử dụng null
thay thế cho nhau bằng undefined
chỉ vì cả hai đều xảy ra để ép buộc đến false
.
Hãy nhận biết, tuy nhiên, đó là trong thực tế có thể cho một chức năng để nói nếu một tham số đã thực sự bỏ qua (so với được thiết lập để undefined
):
f(undefined); // Second param omitted
function f(a, b) {
// Both a and b will evaluate to undefined when used in an expression
console.log(a); // undefined
console.log(b); // undefined
// But...
console.log("0" in arguments); // true
console.log("1" in arguments); // false
}
Chú thích
- Trong khi
undefined
cũng không thuộc loại "number"
, toàn bộ công việc là loại không thực sự là một loại. Đó là lý do tại sao giá trị được giả định bởi các biến chưa được khởi tạo và giá trị trả về mặc định cho các hàm.
Nguồn
2012-08-02 17:56:01
+1. Tôi không biết điều này thực hiện chính xác (giống như 'undefined'?) Nhưng nó chắc chắn sẽ tốt nhất cho" bỏ qua các tham số tùy chọn ". – Thilo
Tôi đã thấy rằng bạn không bao giờ có thể chắc chắn những gì để vượt qua thay vì "bỏ qua" tham số. Chưa xác định? Vô giá trị? 0? Chuỗi rỗng? Đối tượng trống? Mảng? ** Nếu hành vi bỏ qua tham số không được tài liệu, hoặc không có tham số mặc định, bạn gặp rắc rối lớn **. Bạn không thể ngủ ngon nếu bạn cập nhật thư viện bên ngoài. Chỉ có thượng đế và có thể nhà phát triển thư viện có thể biết điều gì sẽ xảy ra nếu bạn vượt qua bất kỳ điều gì bất ngờ thay vì tham số bắt buộc. Generaly nếu hành vi này không phải là tài liệu, các lỗi là trên bạn – Dan
Điều này vẫn hoạt động trong năm 2017 trên phiên bản google chrome mới nhất vì vậy tôi đang upvoting. – Anonymous