2011-12-02 28 views
32

Bạn có thể vui lòng chỉ cho tôi cách tốt nhất để bỏ qua các tham số tùy chọn trong JavaScript hay không.Bỏ qua các tham số chức năng tùy chọn trong JavaScript

Ví dụ, tôi muốn vứt bỏ tất cả opt_ thông số ở đây:

goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {'Cache-Control': 'no-cache'}, opt_timeoutInterval) 

Trả lời

69

Giải pháp:

goog.net.XhrIo.send(url, undefined, undefined, undefined, {'Cache-Control': 'no-cache'}) 

Bạn nên sử dụng undefined thay vì tham số tùy chọn bạn muốn bỏ qua, bởi vì 100% này mô phỏng các giá trị mặc định cho các thông số tùy chọn trong JavaScript.

nhỏ ví dụ:

myfunc(param); 

//is equivalent to 

myfunc(param, undefined, undefined, undefined); 

Mạnh khuyến cáo: sử dụng JSON nếu bạn có rất nhiều thông số, và bạn có thể có thông số tùy chọn ở giữa của danh sách tham số. Hãy xem cách thực hiện điều này trong jQuery.

+1

+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

+0

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

+0

Đ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

6

Chỉ cần vượt qua null như giá trị tham số.

Added: bạn cũng có thể bỏ qua tất cả các thông số tùy chọn hậu quả sau khi người cuối cùng mà bạn muốn vượt qua giá trị thực (trong trường hợp này, bạn có thể bỏ qua opt_timeoutInterval tham số ở tất cả)

+2

Bạn có chắc chắn không có '=== undefined' kiểm tra bên trong không? – Dan

+0

@Dan, bạn đã đặt câu hỏi của mình dưới dạng câu hỏi JavaScript chung với mã đó làm ví dụ. Nếu bạn cần trợ giúp cụ thể về cách 'goog.net.XhrIo.send()' hoạt động, vui lòng lặp lại câu hỏi. – nnnnnn

+0

Cảm ơn bạn rất nhiều @nnnnnn, nhưng đây thực sự là một câu hỏi * chung * JavaScript và câu trả lời sẽ hoạt động trong trường hợp * any *. Nếu không có giải pháp chung, xin vui lòng gửi nó trong câu trả lời của bạn. – Dan

1

Ý anh là gì bằng cách bỏ qua? Bạn có thể vượt qua trong null và bạn hoàn toàn có thể bỏ qua các tham số sau (opt_timeoutInterval trong trường hợp này), nhưng bạn cần đảm bảo tham số Bộ nhớ cache của bạn trở thành thứ năm.

goog.net.XhrIo.send(url, null, null, null, {'Cache-Control': 'no-cache'}); 

Nếu bạn không cần Cache-Control:

goog.net.XhrIo.send(url); 

khác thông số API mất như một băm để làm cho thông số tùy chọn dễ dàng hơn (và nhiều thông số được đặt tên vì thế tự chủ tài liệu), nhưng mà vị trí các thông số được mong đợi, bạn phải đi với điều đó.

+0

Bằng cách bỏ qua tôi có nghĩa là sống nó trống.Có lẽ ở đây chúng ta có thiết kế giao diện xấu, có thể. Bạn hoàn toàn đúng về tham số theo dõi. Tôi cũng biết: 1) chức năng sẽ hoạt động mà không có tham số thứ hai, thứ ba và thứ tư. 2) giá trị mặc định cho tham số thứ ba là "GET". Vì vậy, nhiều từ ở đây ... Tôi nghĩ rằng đó là thiết kế chức năng xấu vì vậy hãy dừng – Dan

+0

JSON nên được sử dụng ở đây làm cách để chuyển các tham số – Dan

21

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

  1. 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.
Các vấn đề liên quan