2011-11-16 51 views
2

我們知道javascript邏輯運算符||如果第一個操作數是true,則會生成其第一個操作數的值。否則,它會生成第二個操作數的值。通過邏輯運算符分配默認值OR

所以在這個例子:

<script language="javascript"> 
function test (value){ 
    this.value = value || "(value not given)"; 
} 
</script> 

如果傳遞給函數的參數作爲當作整數或空字符串「」然後此。值將被設置爲(值未給出)這不是 true正確(因爲的確是我們正在傳遞一個值)。

所以問題是哪個應該是最好的方法來設置this.value

編輯:所有4個第一個答案使用三元運算符「?」。我的問題是關於「||」運營商。

+0

我沒有得到你的問題。'「(沒有給出的值)」'強制爲'true'。 –

+0

請說明你的意思,當你說「this.value'將被設置爲'(value not given)'__not__'true'」。 –

+0

@ aadit-m-shah'(value not given)'是當參數'value'被視爲false時要分配的默認值。這個問題沒有錯誤。 –

回答

7

該方案與||是最方便的來寫,但是當一個falsey值(undefinednull0""falseNaN)是不是一個合法的值,它只能被使用。

如果您想允許特定的錯誤值並且不允許其他錯誤值,那麼您必須編寫更多特定的代碼來處理您的特定情況。例如,如果你想允許空字符串,但不允許空或未定義或其他falsey值,那麼你就必須多寫具體代碼如下:

function test(value) { 
    if (value || value === "") { 
     this.value = value; 
    } else { 
     this.value = "(value not given)"; 
    } 
} 

或者,如果你只想排除只有undefined,可以專門測試了這個問題:

function test(value) { 
    if (value === undefined) { 
     value = "(value not given)"; 
    } 
    this.value = value; 
} 
+0

您的語法錯誤。你的if語句應該如下:'if(value || value ===「」)''。 –

+0

@AaditMShah - 更正了錯字。 – jfriend00

+0

你的第一個陳述很有意義。我贊同你。 ||在某些情況下它不適用。很好的答案,謝謝! –

1

這取決於您想要排除的值。如果「一般錯誤值」類別太寬泛,則可以更明確:

function test(value) { 
    this.value = value !== undefined ? value : "(value not given)"; 
} 
1

如果您希望能夠分配falsey值,請執行此操作。

this.value = (typeof value !== 'undefined') ? value : 'value not given'; 

這將保留值一樣false'',並0,但將使用默認的當值實際上是不作爲參數傳遞。

1
<script language="javascript"> 
function test (value){ 
    this.value = arguments.length > 0 ? value : "(value not given)"; 
} 
</script> 

您可以通過檢查函數參數數組的長度來檢查是否傳入參數。

+0

+1,但我更喜歡@OrlandoLeite指定的方法。 –

1

正確的方法是:

this.value = (typeof value == 'undefined') ? 'my argument' : value; 

可能重複的問題。 Google it。