2012-08-30 53 views
1

很多時候,我發現自己需要的類似書面的東西:可以通過更好的方式完成對null的默認檢查嗎?

_parsedBetData["prizeLevel"] = params["prizeLevel"] == null ? "default" : params["prizeLevel"]; 

我很好奇,如果有更好的方法來做到這一點?我主要擔心的是我必須寫兩次參數params [「prizeLevel」]

當然,這可以被提取到類似的功能:

_parsedBetData["prizeLevel"] = defaultIfNull(params["prizeLevel"], "foo"); 

function defaultIfNull(o:*, default:*):* { 
    return o == null ? default : o; 
} 

但後來我就必須有從地方我想這樣做檢查訪問該功能。因此,我想知道是否有一些聰明的方法來解決這個問題。也許在某種魔法的幫助下?還是在原型/動態的東西適用於這裏?

我現在想到的最好的解決方案是在代碼IDE中創建一個宏,使得某些特定的鍵盤組合可以編寫它。但我敢打賭,有人有一個更好的主意。

+1

我不是說你的情況是這樣,但通常不得不在同一個對象上重複測試null,這意味着你需要重新考慮你的設計。也許你需要爲對象設置某種默認設置,這樣你仍然可以處理它,並且它永遠不會爲空,即使該對象什麼也不做。 – Neil

+0

@尼爾:是的,好點,這裏有很好的參考。但在這種情況下,這是「默認」情況。我將值分配給「視圖模型」,除非它們作爲啓動參數/在服務器響應等中提供。 –

回答

2

這也許是你正在尋找的語法:

_parsedBetData["prizeLevel"] = params["prizeLevel"] || "default"; 

要設置_parsedBetData [ 「prizeLevel」]爲默認,如果爲空,你可以做

_parsedBetData["prizeLevel"] ||= "default"; 

這可能不是做你想要的,因爲一個空字符串的計算也是錯誤的。

+0

謝謝,這是我尋找的東西:))很高興知道空字符串評估爲false –

4

也許logical OR assignment是你在找什麼:)

你可以做

PARAMS [ 「prizeLevel」] || = 「默認」;

如果你希望它是在其他一些變量,然後用一個簡單的OR operator

_parsedBetData [ 「prizeLevel」] =參數[ 「prizeLevel」] || 「默認」;

- 編輯 -

兩個32bitkid和cleong是正確的。你應該使用邏輯運算符,而不是按位運算符。

+1

我認爲你的意思是'||'(邏輯或)而不是'|'(按位或) –

+0

你'完全正確!對不起,我滑了:S – jbalsas

+0

感謝您提供這些信息! :) –

相關問題