2012-01-11 72 views
1

我有一个问题,了解一些JavaScript语法如下:条件语句/语法混乱

var myObject = { 
    value: 0; 
    increment: function (inc) { 
     this.value += typeof inc === 'number' ? inc : 1; 
    } 
}; 
myObject.increment(); 
document.writeln(myObject.value); // 1 
myObject.increment(2); 
document.writeln(myObject.value); // 3 

具体做法是:

this.value += typeof inc === 'number' ? inc : 1; 

是该行称,如果:

typeof inc === 'number' 

则:

this.value += inc 

什么好办法去想这个或资源来帮助理解,将不胜感激。

+0

这如果“inc”是一个有效的数字,那么使用它来增加,否则使用1.你也可以写:this.value + =(isNaN(inc)?1:inc); – 2012-01-11 02:54:45

回答

1

这是正确的,这就是所谓的一个三元运算符。如果语句解析为true,则它执行第一个选项,否则解析第二个选项。它可以被分解成简单的if/else

if (typeof inc === 'number') this.value += inc; 
else this.value++; 
+0

感谢您的答复 – zallarak 2012-01-11 03:01:52

1

这的确是说如果typeof inc === 'number'然后inc添加到this.value,否则要加1 this.value。该模式是三元运算符,如果该条件为真,它返回:的左侧,而如果:假的右侧的一个例子。

三元操作有些更常用的分配,如:

// Assign the greater of y and z to x (or z if they're equal) 
var x = y > z ? y : z; 

// equivalent to: 
if (y > z) { 
    var x = y; 
} 
else var x = z; 

在这种情况下,虽然,它被用于许多返回+=运营商。

+0

感谢@迈克尔,你的解释,你写的代码示例。 – zallarak 2012-01-11 03:02:27

1

这是ternary操作。

this.value += typeof inc === 'number' ? inc : 1; 

相同

if (typeof inc === 'number') { 
    this.value += inc; 
} else { 
    this.value += 1; 
} 
+0

谢谢!两种变体都有速度优势吗?我猜不是,如果是这样的话,有人刚刚进入JavaScript我会考虑采用后者作为风格。 – zallarak 2012-01-11 03:04:22

+0

没有速度好处,我也会使用后者。它更具可读性。 – Joe 2012-01-11 03:05:28

+0

这是条件运算符,它是三元运算符的一个例子。 – 2012-01-11 03:07:14

1

三元运算符是if/else语句只是一个简写。它有时有助于把括号内的条件表达式,以更好地看到正在测试的条件:

this.value = (typeof inc === 'number') ? inc : 1; 

因此,如果“数”,然后分配给INC THIS.VALUE的typeof INC结果以其他方式转让1.

+0

谢谢,澄清! – zallarak 2012-01-11 03:01:12