2011-05-09 67 views
1
function decimalToHex(d, padding) { 

    var hex = Number(d).toString(16); 
    /*I dont understand this part: does this mean if padding gets a value = "undefined". It'd be equal to "justchecking" in this case. 
     What is a value of "undefined" then? is it really necessary this if-statement? */ 
    padding = typeof (padding) === "undefined" || padding === null ? padding = "justchecking" : padding; 

    while (hex.length < padding) { 
     hex = "0" + hex; 
    } 

    return hex; 
} 

感謝你的解釋...不明白這個JS

+0

這屬於代碼審查 – Neal 2011-05-09 17:25:08

+0

@Neal你是什麼意思? – YoniGeek 2011-05-09 18:30:34

回答

2
padding = typeof (padding) === "undefined" || padding === null ? padding = "justchecking" : padding; 

有在有條件的錯誤上面應改爲:

padding = typeof (padding) === "undefined" || padding === null ? "justchecking" : padding; 

但在任何情況下,這相當於寫作:

if(typeof(padding) == "undefined" || padding === null) 
{ 
    padding = 'justchecking'; 
} 

它是什麼做的是看是否填充存在並以最明確的方式定義,因爲只要檢查if(padding)將在padding爲「」或0時返回falsy。但是,如果檢查變量的類型並且它尚未定義,那麼它獲取特殊字符串「undefined」。如果你只是檢查null,它可以被定義,因爲null與typeof undefined的真實性不同。一個小概述在這裏:http://scottdowne.wordpress.com/2010/11/28/javascript-typeof-undefined-vs-undefined/,你也可以在道格拉斯克羅克福茲找到它的討論我認爲權威指南。

2

這是一個ternary operator。簡單地說,它是一個的if/else塊的精簡版,其格式爲:

condition ? true expression : false expression; 

在你的情況下,它的默認值paddingjustchecking

0

如果沒有填充存在,這只是爲padding變量指定默認值「justchecking」。

它可以也可以寫成:

padding = padding || "justchecking"; 

...雖然它不完全等同,因爲這也將與默認的替代值0。

0

這意味着:如果已定義並且爲空,則將「只檢查」分配給變量「padding」。

+0

你的意思是 - *如果沒有定義*。 – 2011-05-09 17:30:16