你能在JavaScript中拥有多个可选参数吗?

时间:2015-12-18 16:30:12

标签: javascript arguments optional-parameters optional-arguments

你可以在JavaScript中有多个可选参数

假设您有一个功能狗,它需要3个参数,一个需要,2个可选。

dog(dogsName, [tripsOutOfTheCountry], [numberOfDoctorsVisits])

我知道你可以检查未定义但是如果这个人没有提供tripOutOfTheCountry,因为它是可选的,只是提供他们认为是numberOfDoctorsVisits。

示例运行:

dog("Rusty", 10)

他们为numberofDoctorsVisits输入10,将tripsOutOfTheCountry留空,因为它是可选的。

所以真的程序似乎tripOutOfTheCountry为10,这是真正的数字医生访问

有没有办法避免这种情况。我不认为除了用户为tripsOutOfTheCountry输入0之外还有其他办法。

将上述示例修改为dog("Rusty, 0, 10)

我只是提出这个问题,因为我不知道是否可能。

P.S。对不起老生的例子

1 个答案:

答案 0 :(得分:2)

在任何不支持调用时命名参数的语言中都存在同样的问题,但只是传递参数位置。如果你能明确规定每个参数,你可以手动弄清楚它是什么;例如如果参数具有不同的类型(如数字和函数),则可以测试分配给什么的内容,并根据预期的类型和顺序进行转换。许多想要公开灵活API的库可以做到这一点,例如:只需查看somewhat controversially允许的变体。这就是你的全部,Javascript根本无法帮助你。

执行此操作的常用方法是传递具有显式名称的对象:

015-12-18 11:19:07.449 collaboration[4761:357519] *** Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.30.14/UITableView.m:7962
2015-12-18 11:19:07.453 collaboration[4761:357519] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView (<UITableView: 0x7c9f6400; frame = (16 58; 288 412); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7a7a4170>; layer = <CALayer: 0x7a7a3250>; contentOffset: {0, 0}; contentSize: {288, 44}>) failed to obtain a cell from its dataSource (<collaboration.chatViewController: 0x7a7a0750>)'
*** First throw call stack:
(
    0   CoreFoundation                      0x00304a14 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x02233e02 objc_exception_throw + 50
    2   CoreFoundation                      0x003048aa +[NSException raise:format:arguments:] + 138
    3   Foundation                          0x00946d26 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 118
    4   UIKit                               0x00ede528 -[UITableView _configureCellForDisplay:forIndexPath:] + 228
    5   UIKit                               0x00eeb3cf -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 877
    6   UIKit                               0x00eeb4e1 -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 90
    7   UIKit                               0x00ebb948 -[UITableView _updateVisibleCellsNow:isRecursive:] + 3347
    8   UIKit                               0x00eda0d6 __29-[UITableView layoutSubviews]_block_invoke + 52
    9   UIKit                               0x00ef519e -[UITableView _performWithCachedTraitCollection:] + 88
    10  UIKit                               0x00ed9fab -[UITableView layoutSubviews] + 214
    11  UIKit                               0x00e30008 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 810
    12  libobjc.A.dylib                     0x02248059 -[NSObject performSelector:withObject:] + 70
    13  QuartzCore                          0x05bf580a -[CALayer layoutSublayers] + 144
    14  QuartzCore                          0x05be94ee _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 388
    15  QuartzCore                          0x05be9352 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 26
    16  QuartzCore                          0x05bdbe8b _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 317
    17  QuartzCore                          0x05c0fe03 _ZN2CA11Transaction6commitEv + 561
    18  QuartzCore                          0x05c11674 _ZN2CA11Transaction17flush_transactionEv + 50
    19  UIKit                               0x00d94dfa _afterCACommitHandler + 197
    20  CoreFoundation                      0x0021dffe __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
    21  CoreFoundation                      0x0021df5e __CFRunLoopDoObservers + 398
    22  CoreFoundation                      0x002138dc __CFRunLoopRun + 1340
    23  CoreFoundation                      0x002130e6 CFRunLoopRunSpecific + 470
    24  CoreFoundation                      0x00212efb CFRunLoopRunInMode + 123
    25  GraphicsServices                    0x05696664 GSEventRunModal + 192
    26  GraphicsServices                    0x056964a1 GSEventRun + 104
    27  UIKit                               0x00d63bfa UIApplicationMain + 160
    28  collaboration                       0x000b125c main + 140
    29  libdyld.dylib                       0x02c97a21 start + 1
    30  ???                                 0x00000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)