2011-05-09 35 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