Hướng dẫn check if function has parameter javascript - kiểm tra xem hàm có tham số javascript không

Bây giờ tôi đã thấy 2 phương thức để xác định xem một đối số đã được chuyển đến hàm JavaScript. Tôi đang tự hỏi nếu một phương pháp tốt hơn phương pháp khác hay nếu cái này chỉ là xấu để sử dụng?

 function Test(argument1, argument2) {
      if (Test.arguments.length == 1) argument2 = 'blah';

      alert(argument2);
 }

 Test('test');

Hoặc

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');

Theo như tôi có thể nói, cả hai đều dẫn đến cùng một thứ, nhưng tôi chỉ sử dụng cái đầu tiên trước đây trong sản xuất.

Một lựa chọn khác như đã đề cập bởi Tom:

function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}

Theo nhận xét của Juan, sẽ tốt hơn nếu thay đổi đề xuất của Tom thành:

function Test(argument1, argument2) {
    if(argument2 === undefined) {
        argument2 = 'blah';
    }

    alert(argument2);
}

Hướng dẫn check if function has parameter javascript - kiểm tra xem hàm có tham số javascript không

Đã hỏi ngày 4 tháng 1 năm 2009 lúc 17:38Jan 4, 2009 at 17:38

Darryl Heindarryl HeinDarryl Hein

Phù vàng 140K89 Huy hiệu vàng213 Huy hiệu đồng89 gold badges213 silver badges259 bronze badges

5

Có một số cách khác nhau để kiểm tra xem một đối số đã được truyền đến một hàm. Ngoài hai bạn đã đề cập trong câu hỏi (bản gốc) của mình - kiểm tra

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
7 hoặc sử dụng toán tử
 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
8 để cung cấp các giá trị mặc định - người ta cũng có thể kiểm tra rõ ràng các đối số cho
 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
9 qua
function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}
0 hoặc
function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}
1 nếu một người bị hoang tưởng (xem nhận xét).

Sử dụng toán tử

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
8 đã trở thành thông lệ tiêu chuẩn - tất cả những đứa trẻ tuyệt vời làm điều đó - nhưng hãy cẩn thận: giá trị mặc định sẽ được kích hoạt nếu đối số đánh giá là
function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}
3, có nghĩa là nó thực sự có thể là
 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
9,
function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}
5,
function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}
3,
function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}
7,
function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}
8 Bất cứ điều gì khác mà
function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}
9 trả về
function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}
3).

Vì vậy, câu hỏi là khi nào nên sử dụng kiểm tra nào, vì tất cả đều mang lại kết quả hơi khác nhau.

Kiểm tra

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
7 thể hiện hành vi 'chính xác' nhất, nhưng có thể không khả thi nếu có nhiều hơn một đối số tùy chọn.

Bài kiểm tra cho

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
9 là 'tốt nhất' tiếp theo - chỉ 'không thành công' nếu hàm được gọi rõ ràng với giá trị
 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
9, trong tất cả các khả năng sẽ được đối xử giống như việc bỏ qua đối số.

Việc sử dụng toán tử

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
8 có thể kích hoạt việc sử dụng giá trị mặc định ngay cả khi một đối số hợp lệ được cung cấp. Mặt khác, hành vi của nó thực sự có thể được mong muốn.

Tóm lại: Chỉ sử dụng nó nếu bạn biết bạn đang làm gì!

Theo tôi, sử dụng

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
8 cũng là cách để đi nếu có nhiều đối số tùy chọn và người ta không muốn truyền một đối tượng theo nghĩa đen như một cách giải quyết cho các tham số được đặt tên.

Một cách hay khác để cung cấp các giá trị mặc định bằng cách sử dụng

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
7 bằng cách rơi qua nhãn của câu lệnh chuyển đổi:

function test(requiredArg, optionalArg1, optionalArg2, optionalArg3) {
    switch(arguments.length) {
        case 1: optionalArg1 = 'default1';
        case 2: optionalArg2 = 'default2';
        case 3: optionalArg3 = 'default3';
        case 4: break;
        default: throw new Error('illegal argument count')
    }
    // do stuff
}

Điều này có nhược điểm là ý định của lập trình viên không rõ ràng (trực quan) và sử dụng 'số ma thuật'; Do đó, nó có thể dễ bị lỗi.

Đã trả lời ngày 4 tháng 1 năm 2009 lúc 17:46Jan 4, 2009 at 17:46

ChristophchristophChristoph

161K36 Huy hiệu vàng177 Huy hiệu bạc235 Huy hiệu Đồng36 gold badges177 silver badges235 bronze badges

13

Nếu bạn đang sử dụng jQuery, một tùy chọn tốt đẹp (đặc biệt là đối với các tình huống phức tạp) là sử dụng phương pháp mở rộng của JQuery.

function foo(options) {

    default_options = {
        timeout : 1000,
        callback : function(){},
        some_number : 50,
        some_text : "hello world"
    };

    options = $.extend({}, default_options, options);
}

Nếu bạn gọi chức năng thì như thế này:

foo({timeout : 500});

Biến tùy chọn sau đó sẽ là:

{
    timeout : 500,
    callback : function(){},
    some_number : 50,
    some_text : "hello world"
};

Đã trả lời ngày 30 tháng 4 năm 2013 lúc 18:16Apr 30, 2013 at 18:16

Đây là một trong số ít trường hợp tôi tìm thấy bài kiểm tra:

if(! argument2) {  

}

Hoạt động khá độc đáo và mang theo hàm ý chính xác.

.really confusing.)

EDIT:

Đây là một ví dụ thực sự tốt về sự khác biệt về phong cách giữa các ngôn ngữ được xyt một cách lỏng lẻo và gõ mạnh; và một lựa chọn phong cách mà JavaScript có trong các thuổng.

Sở thích cá nhân của tôi (không có lời chỉ trích dành cho các sở thích khác) là chủ nghĩa tối giản. Mã càng ít nói, miễn là tôi kiên định và súc tích, càng ít người khác phải hiểu để suy luận chính xác ý nghĩa của tôi.

Một hàm ý của sở thích đó là tôi không muốn - không thấy nó hữu ích để - chồng chất một loạt các bài kiểm tra phụ thuộc loại. Thay vào đó, tôi cố gắng làm cho mã có nghĩa là những gì nó trông giống như nó có nghĩa là; Và chỉ kiểm tra cho những gì tôi thực sự sẽ cần phải kiểm tra.

Một trong những tình trạng tăng nặng mà tôi tìm thấy trong một số mã của một số người khác là cần phải tìm hiểu xem họ có mong đợi, trong bối cảnh lớn hơn, để thực sự gặp phải các trường hợp họ đang thử nghiệm. Hoặc nếu họ đang cố gắng kiểm tra mọi thứ có thể, thì có khả năng họ không lường trước được bối cảnh hoàn toàn đủ. Điều đó có nghĩa là cuối cùng tôi cần phải theo dõi chúng hoàn toàn theo cả hai hướng trước khi tôi có thể tự tin tái cấu trúc hoặc sửa đổi bất cứ điều gì. Tôi cho rằng có một cơ hội tốt họ có thể đã đưa ra các thử nghiệm khác nhau vì họ thấy trước hoàn cảnh mà chúng sẽ cần thiết (và thường không rõ ràng với tôi).

.

Tôi đã thấy điều này một cách quyến rũ nhất trong việc so sánh mã ActionScript 3 toàn diện với mã JavaScript thanh lịch. AS3 có thể gấp 3 hoặc 4 lần phần lớn JS và độ tin cậy mà tôi nghi ngờ ít nhất là không tốt hơn, chỉ vì số (3-4x) của các quyết định mã hóa đã được đưa ra.

Như bạn nói, Shog9, YMMV. : D

Hướng dẫn check if function has parameter javascript - kiểm tra xem hàm có tham số javascript không

Đã trả lời ngày 4 tháng 1 năm 2009 lúc 17:53Jan 4, 2009 at 17:53

Dkretzdkretzdkretz

37.1K13 Huy hiệu vàng79 Huy hiệu bạc136 Huy hiệu đồng13 gold badges79 silver badges136 bronze badges

7

Trong ES6 (ES2015), bạn có thể sử dụng các tham số mặc định

function Test(arg1 = 'Hello', arg2 = 'World!'){
  alert(arg1 + ' ' +arg2);
}

Test('Hello', 'World!'); // Hello World!
Test('Hello'); // Hello World!
Test(); // Hello World!

Đã trả lời ngày 23 tháng 7 năm 2017 lúc 22:14Jul 23, 2017 at 22:14

Hướng dẫn check if function has parameter javascript - kiểm tra xem hàm có tham số javascript không

andriy2andriy2andriy2

1211 huy hiệu bạc6 Huy hiệu đồng1 silver badge6 bronze badges

3

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
0

Paul Rooney

20K9 Huy hiệu vàng41 Huy hiệu bạc61 Huy hiệu Đồng9 gold badges41 silver badges61 bronze badges

Đã trả lời ngày 21 tháng 8 năm 2012 lúc 9:51Aug 21, 2012 at 9:51

YasenyasenYasen

3.3101 Huy hiệu vàng26 Huy hiệu bạc22 Huy hiệu đồng1 gold badge26 silver badges22 bronze badges

2

Có sự khác biệt đáng kể. Hãy thiết lập một số trường hợp kiểm tra:

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
1

Với phương pháp đầu tiên bạn mô tả, chỉ thử nghiệm thứ hai sẽ sử dụng giá trị mặc định. Phương pháp thứ hai sẽ mặc định tất cả trừ phương pháp thứ nhất (vì JS sẽ chuyển đổi

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
9,
function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}
5,
function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}
7 và
function test(requiredArg, optionalArg1, optionalArg2, optionalArg3) {
    switch(arguments.length) {
        case 1: optionalArg1 = 'default1';
        case 2: optionalArg2 = 'default2';
        case 3: optionalArg3 = 'default3';
        case 4: break;
        default: throw new Error('illegal argument count')
    }
    // do stuff
}
1 thành boolean
function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}
3. Và nếu bạn sử dụng phương pháp của Tom, chỉ có thử nghiệm thứ tư sẽ sử dụng mặc định!

Phương pháp nào bạn chọn thực sự phụ thuộc vào hành vi dự định của bạn. Nếu các giá trị khác với

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
9 được cho phép đối với
function Test(argument1, argument2) {
    if(argument2 === undefined) {
        argument2 = 'blah';
    }

    alert(argument2);
}
7, thì có lẽ bạn sẽ muốn một số biến thể đầu tiên; Nếu một giá trị khác không, không null, không trống được mong muốn, thì phương pháp thứ hai là lý tưởng-thực sự, nó thường được sử dụng để nhanh chóng loại bỏ một loạt các giá trị như vậy khỏi xem xét.

Đã trả lời ngày 4 tháng 1 năm 2009 lúc 17:57Jan 4, 2009 at 17:57

Hướng dẫn check if function has parameter javascript - kiểm tra xem hàm có tham số javascript không

Shog9Shog9Shog9

154K34 Huy hiệu vàng227 Huy hiệu bạc232 Huy hiệu Đồng34 gold badges227 silver badges232 bronze badges

Tôi xin lỗi, tôi vẫn không thể bình luận, vì vậy để trả lời câu trả lời của Tom ... trong JavaScript (không xác định! = Null) == Sai trong thực tế rằng chức năng sẽ không hoạt động với "null", bạn nên sử dụng "không xác định"

Đã trả lời ngày 4 tháng 1 năm 2009 lúc 17:48Jan 4, 2009 at 17:48

Luca Matteisluca MatteisLuca Matteis

29K19 Huy hiệu vàng113 Huy hiệu bạc166 Huy hiệu Đồng19 gold badges113 silver badges166 bronze badges

1

Tại sao không sử dụng toán tử

function test(requiredArg, optionalArg1, optionalArg2, optionalArg3) {
    switch(arguments.length) {
        case 1: optionalArg1 = 'default1';
        case 2: optionalArg2 = 'default2';
        case 3: optionalArg3 = 'default3';
        case 4: break;
        default: throw new Error('illegal argument count')
    }
    // do stuff
}
5? Toán tử này, được đặt trước biến, biến nó thành boolean (nếu tôi hiểu rõ), vì vậy
function test(requiredArg, optionalArg1, optionalArg2, optionalArg3) {
    switch(arguments.length) {
        case 1: optionalArg1 = 'default1';
        case 2: optionalArg2 = 'default2';
        case 3: optionalArg3 = 'default3';
        case 4: break;
        default: throw new Error('illegal argument count')
    }
    // do stuff
}
6 và
function test(requiredArg, optionalArg1, optionalArg2, optionalArg3) {
    switch(arguments.length) {
        case 1: optionalArg1 = 'default1';
        case 2: optionalArg2 = 'default2';
        case 3: optionalArg3 = 'default3';
        case 4: break;
        default: throw new Error('illegal argument count')
    }
    // do stuff
}
7 (và thậm chí
function test(requiredArg, optionalArg1, optionalArg2, optionalArg3) {
    switch(arguments.length) {
        case 1: optionalArg1 = 'default1';
        case 2: optionalArg2 = 'default2';
        case 3: optionalArg3 = 'default3';
        case 4: break;
        default: throw new Error('illegal argument count')
    }
    // do stuff
}
8, có thể khá thú vị) sẽ trở lại
function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}
3.

Đây là một ví dụ:

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
2

Đã trả lời ngày 30 tháng 12 năm 2015 lúc 13:01Dec 30, 2015 at 13:01

RallionrlrallionrlRallionRl

2.1032 huy hiệu vàng9 Huy hiệu bạc9 Huy hiệu đồng2 gold badges9 silver badges9 bronze badges

1

Đôi khi bạn muốn không xác định như một đối số có thể nhưng bạn vẫn có những tình huống mà đối số có thể không được thông qua. Trong trường hợp đó, bạn có thể sử dụng

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
7 để kiểm tra xem có bao nhiêu đối số được thông qua.

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
3

function foo(options) {

    default_options = {
        timeout : 1000,
        callback : function(){},
        some_number : 50,
        some_text : "hello world"
    };

    options = $.extend({}, default_options, options);
}
1 -> vượt qua, chúng tôi không muốn ID trống

function foo(options) {

    default_options = {
        timeout : 1000,
        callback : function(){},
        some_number : 50,
        some_text : "hello world"
    };

    options = $.extend({}, default_options, options);
}
2 -> vượt qua, chúng tôi muốn ID không được xác định

function foo(options) {

    default_options = {
        timeout : 1000,
        callback : function(){},
        some_number : 50,
        some_text : "hello world"
    };

    options = $.extend({}, default_options, options);
}
3 -> Lỗi, chúng tôi muốn ID không được xác định

Đã trả lời ngày 30 tháng 8 năm 2021 lúc 12:16Aug 30, 2021 at 12:16

Hướng dẫn check if function has parameter javascript - kiểm tra xem hàm có tham số javascript không

GilbertgilbertGilbert

1.96720 Huy hiệu bạc24 Huy hiệu đồng20 silver badges24 bronze badges

Có thể thuận tiện để tiếp cận phát hiện đối số bằng cách gợi lên chức năng của bạn với một đối tượng của các thuộc tính tùy chọn:

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
4

Đã trả lời ngày 5 tháng 3 năm 2013 lúc 2:22Mar 5, 2013 at 2:22

1nfiniti1nfiniti1nfiniti

2.00414 Huy hiệu bạc19 Huy hiệu đồng14 silver badges19 bronze badges

Một số lần bạn cũng có thể muốn kiểm tra loại, đặc biệt nếu bạn đang sử dụng chức năng như getter và setter. Mã sau là ES6 (sẽ không chạy trong Ecmascript 5 trở lên):

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
5

Đã trả lời ngày 18 tháng 5 năm 2016 lúc 19:06May 18, 2016 at 19:06

Hướng dẫn check if function has parameter javascript - kiểm tra xem hàm có tham số javascript không

nbloqsnbloqsnbloqs

3.1121 Huy hiệu vàng26 Huy hiệu bạc47 Huy hiệu đồng1 gold badge26 silver badges47 bronze badges

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');
6

Bởi vì các mảng kế thừa từ

function foo(options) {

    default_options = {
        timeout : 1000,
        callback : function(){},
        some_number : 50,
        some_text : "hello world"
    };

    options = $.extend({}, default_options, options);
}
4. Hãy xem xét ⇑ để làm cho thế giới tốt hơn.

Đã trả lời ngày 2 tháng 1 năm 2020 lúc 3:13Jan 2, 2020 at 3:13

fncalledFunction (param1, param2, window.youroptionalparameter)

Nếu chức năng trên được gọi từ nhiều nơi và bạn chắc chắn 2 tham số đầu tiên được truyền từ mọi nơi nhưng không chắc chắn về tham số thứ 3 thì bạn có thể sử dụng cửa sổ.

window.param3 sẽ xử lý nếu nó không được xác định từ phương thức người gọi.

Đã trả lời ngày 28 tháng 6 năm 2018 lúc 5:56Jun 28, 2018 at 5:56

Hướng dẫn check if function has parameter javascript - kiểm tra xem hàm có tham số javascript không

Làm thế nào để bạn kiểm tra xem một tham số có phải là một hàm trong JavaScript không?

Sử dụng toán tử loại để kiểm tra xem hàm có được xác định không, ví dụ: typeOf myFunction === 'hàm'. Toán tử typeOf trả về một chuỗi cho biết loại giá trị. Nếu hàm không được xác định, toán tử typeof trả về "không xác định" và không gây ra lỗi., e.g. typeof myFunction === 'function' . The typeof operator returns a string that indicates the type of a value. If the function is not defined, the typeof operator returns "undefined" and doesn't throw an error.

Làm thế nào để bạn kiểm tra xem một đối số là số javascript?

Trong JavaScript, có hai cách để kiểm tra xem một biến có phải là số không: isnan () - là viết tắt của không phải là một sốSố, nó sẽ trả về một chuỗi có tên là Số Số.isNaN() – Stands for “is Not a Number”, if variable is not a number, it return true, else return false. typeof – If variable is a number, it will returns a string named “number”.

Làm thế nào để bạn kiểm tra xem một đối số có trống trong JavaScript không?

Nói, nếu một chuỗi là trống var name = "" thì console.log (! Name) trả về true.Hàm này sẽ trả về true nếu Val trống, null, không xác định, sai, số 0 hoặc nan.console. log(! name) returns true . this function will return true if val is empty, null, undefined, false, the number 0 or NaN.

Làm thế nào để bạn kiểm tra xem một hàm được gọi là javascript?

Toán tử typeOf Toán tử này sẽ kiểm tra xem tên của hàm được khai báo có tồn tại hay không và liệu đó có phải là một hàm chứ không phải một số loại đối tượng hay nguyên thủy khác. This operator will check whether the name of the declared function exists and whether it is a function and not some other type of object or primitive.