Θα ήθελα μια συνάρτηση JavaScript να έχει προαιρετικά ορίσματα στα οποία ορίζω μια προεπιλογή, τα οποία χρησιμοποιούνται αν η τιμή δεν έχει οριστεί (και αγνοούνται αν η τιμή έχει περάσει). Στη Ruby μπορείτε να το κάνετε ως εξής:
def read_file(file, delete_after = false)
# code
end
Λειτουργεί αυτό στη JavaScript;
function read_file(file, delete_after = false) {
// Code
}
Από το ES6/ES2015, οι προεπιλεγμένες παράμετροι βρίσκονται στις προδιαγραφές της γλώσσας.
function read_file(file, delete_after = false) {
// Code
}
απλά λειτουργεί.
Αναφορά: Default Parameters - MDN
Οι προεπιλεγμένες παράμετροι συνάρτησης επιτρέπουν την αρχικοποίηση των τυπικών παραμέτρων με προεπιλεγμένες τιμές, εάν περάσει καμία τιμή ή undefined.
Μπορείτε επίσης να προσομοιώσετε προεπιλεγμένες ονομαστικές παραμέτρους μέσω αποδόμησης:
// the `= {}` below lets you call the function without any parameters
function myFor({ start = 5, end = 1, step = -1 } = {}) { // (A)
// Use the variables `start`, `end` and `step` here
···
}
Πριν το ES2015,
Υπάρχουν πολλοί τρόποι, αλλά αυτή είναι η μέθοδος που προτιμώ - σας επιτρέπει να περάσετε οτιδήποτε θέλετε, συμπεριλαμβανομένου του false ή του null. (typeof null == "object"
)
function foo(a, b) {
a = typeof a !== 'undefined' ? a : 42;
b = typeof b !== 'undefined' ? b : 'default_b';
...
}
function read_file(file, delete_after) {
delete_after = delete_after || "my default here";
//rest of code
}
Αυτό εκχωρεί στο delete_after
την τιμή του delete_after
αν δεν είναι μια ψεύτικη τιμή αλλιώς εκχωρεί τη συμβολοσειρά "my default here"
. Για περισσότερες λεπτομέρειες, ανατρέξτε στην έρευνα του Doug Crockford'για τη γλώσσα και δείτε την ενότητα για τους τελεστές.
Αυτή η προσέγγιση δεν λειτουργεί αν θέλετε να περάσετε μια ψεύτικη τιμή π.χ. false
, null
, undefined
, 0
ή ""
. Αν θέλετε να περάσετε ψευδείς τιμές, θα πρέπει να χρησιμοποιήσετε τη μέθοδο της απάντησης του Tom Ritter's.
Όταν πρόκειται για έναν αριθμό παραμέτρων σε μια συνάρτηση, είναι συχνά χρήσιμο να επιτρέπετε στον καταναλωτή να περνάει τα ορίσματα των παραμέτρων σε ένα αντικείμενο και στη συνέχεια να συγχωνεύει αυτές τις τιμές με ένα αντικείμενο που περιέχει τις προεπιλεγμένες τιμές για τη συνάρτηση
function read_file(values) {
values = merge({
delete_after : "my default here"
}, values || {});
// rest of code
}
// simple implementation based on $.extend() from jQuery
function merge() {
var obj, name, copy,
target = arguments[0] || {},
i = 1,
length = arguments.length;
for (; i < length; i++) {
if ((obj = arguments[i]) != null) {
for (name in obj) {
copy = obj[name];
if (target === copy) {
continue;
}
else if (copy !== undefined) {
target[name] = copy;
}
}
}
}
return target;
};
για χρήση
// will use the default delete_after value
read_file({ file: "my file" });
// will override default delete_after value
read_file({ file: "my file", delete_after: "my value" });