不明白这个JS

时间:2011-05-09 17:24:05

标签: javascript if-statement

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;
}

感谢您的解释......

4 个答案:

答案 0 :(得分:2)

这是一个ternary operator。简而言之,它是if / else块的精简版,格式为:

condition ? true expression : false expression; 

在您的情况下,默认paddingjustchecking

答案 1 :(得分: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';
}

它正在做的是查看填充是否存在并以最明确的方式定义,因为如果填充是“”或0,只检查if(padding)将返回falsy。但是如果检查变量的类型和它尚未定义,然后它获取特殊字符串“undefined”。如果您只检查null,则可以定义它,因为null与typeof undefined的真实性不同。这里有一点概述:http://scottdowne.wordpress.com/2010/11/28/javascript-typeof-undefined-vs-undefined/你也可以在Douglas Crockfords中找到它的讨论。我认为这是权威指南。

答案 2 :(得分:0)

如果没有填充,则只为padding变量分配默认值“justchecking”。

它也可以写成:

padding = padding || "justchecking";

...虽然它并不完全等效,但这也会将0的值替换为默认值。

答案 3 :(得分:0)

这意味着:如果已经定义并且为null,则将“justchecking”分配给变量“padding”。