2010-12-02 2 views
1

그래서이 꽤 자주 나에게 발생하지만, 여기 내 최신 하나 방법은

var generic_error = function(title,msg){ 
     if(!title){ title= 'Oops!'; } 
     if(!msg) { msg = 'Something must have gone wrong, but no worries we\'re working on it!'; } 
     $.fancybox(
     { 
      content:'\ 
       <div class="error_alert">\ 
        <h2>'+title+'</h2>\ 
        <p>'+msg+'\ 
       </div>' 
     }); 
    } 

모두가 같은 PARAMS 확인하는 청소기 방법이 있나요 위에서 titlemsg을 선택하고 OR을 옵션으로 설정하거나 예를 들어 PHP가 어떻게하는지 같은 함수에서 기본값을 정의 할 수 있습니까? 때로는 10 옵션을 가질 수 있으며 if(!var){var='defaults'} x 10은 칙칙합니다 ...

답변

1

함수 인수에 대해서는 if(!title)title='DefaultTitle'보다 상당히 간단하고 간단한 것을 찾을 것입니다.

그러나 더 명확하게하기 위해 긴 양식을 사용합니다. if (title===null) title='DefaultTitle'.

여기에 답과 관련된 질문이 있지만 코드가 복잡해질 것이라고 생각합니다. How can I access local scope dynamically in javascript?

1

당신은 recommended by this article로하지만 간단한 형태로 삼항 표기법을 사용할 수 있습니다

var n = null; 
!title ? title = 'Oops' : n; 

또한 인수를 보유하고 루프에서 사용될 수 arguments[] 배열을 가지고있어,이 같은 :

function test(one,two,three) { 
    i=0; 
    while(typeof(arguments[i]) != 'undefined') { 
    alert(arguments[i++]); 
    } 
} 

test(40,27,399); 
1
switch (arguments.length) { 
    case 0: title = 'Oops'; 
    case 1: message = 'Something must have gone wrong...'; 
} 
+0

+1이 'switch-case' 방법은 아마 내'while '루프보다 낫습니다 ... – Ben

4

사용하는 것입니다 당신이 지금하고있는에 약간 짧은하지만 해당 "||" AKA "또는"AKA "가 기본 연산자입니다.

title = title || 'Oops!'; 
msg = msg || 'Something must have gone wrong, but no worries we\'re working on it!'; 
0

다른 접근법이 있습니다. argsOK 함수는 조금 복잡하지만 쉽게 호출 할 수 있습니다. (당신이 볼 수 있듯이, 한 - 라이너)를 호출

//----------------------------------------------------- 
/* 
PURPOSE Ensures a function received all required arguments, no extra 
     arguments & (if so specified) no arguments are empty. 
RETURNS True if the arguments validate, else false. 
*/ 
function argsOk(
    functionCallee , // Caller's callee object 
    allArgsRequired , // True = All arguments are required 
    emptyArgsAllowed // True = Empty arguments are allowed 
){ 
    var ok = true; 
    for (var i = 0; i < 1; ++i) { 
     var functionName = functionCallee.toString().split(' ')[1].split('(')[0]; 
     var args = functionCallee.arguments; 
     var expectedArgCount = functionCallee.length; 
     var actualArgCount = args.length; 
     if ((allArgsRequired && actualArgCount < expectedArgCount) || 
      (actualArgCount > expectedArgCount)) { 
      error("Function " + functionName + " expected " + expectedArgCount + " arguments, but received " + actualArgCount + "."); 
      ok = false; 
      break; 
     } 
     if (emptyArgsAllowed) { 
      break; 
     } 
     for (var j = 0; j < args.length; ++j) { 
      if (args[j] != null && args[j].length == 0) { 
       error("Function " + functionName + "() received an empty argument."); 
       ok = false; 
       break; 
      } 
     } 
    } 
    return ok; 
} 

예 : 일반적으로

//------------------------------------------------ 
function image(item, name, better) 
// PURPOSE Write a request for picture or photo 
// ENTRY  Init() has been called 
{ 
    if (!showingShortVersion()) { 
     var betterString = ''; 
     if (better != null && better == true) 
      betterString = 'better '; 
     if (argsOk(arguments.callee, true, false)) 
      write('<p class="request maintain">If you have ac&shy;cess to a ' + betterString + item + ' of ' + name + ' that we could put on&shy;line, please <a href="misc/pics.htm" onmouseover="return stat(\'Learn how to send us images\')" onmouseout="return erase()">click here</a>.</p>'); 
    } 
} 
0

, 특히 자바 스크립트, 깨끗한 = 짧은!.

일반 용액으로 if(!title){ title= 'Oops!'; }을 사용하지 마십시오. 0 빈 문자열도 위증입니다. 설정되지 않은 인수, undefined, 그래서 나는 그렇게하는 것이 더 장황 수 있습니다

if (title === undefined) { 
    title= 'Oops!'; 
} 

을 사용하여 선호하지만, 그것은 원치 않는 부작용을 방지하고, 내 경험, 자바 스크립트가 원치 않는 부작용이 많이 발생 , 만약 당신이 바로 가기를 사용하려고합니다.