条件/语法混乱

时间:2012-01-11 02:51:00

标签: javascript

我有一个问题需要了解一些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;

这句话是否说:if:

typeof inc === 'number'

然后:

this.value += inc

任何考虑这个或资源以帮助理解的好方法都将受到赞赏。

4 个答案:

答案 0 :(得分:1)

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

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

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

在这种情况下,它用于向+=运算符返回一个数字。

答案 2 :(得分:1)

它是ternary运营商。

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

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

答案 3 :(得分:1)

三元运算符只是if / else的简写版本。将条件表达式放在括号内有时会有助于更好地查看正在测试的条件:

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

因此,如果typeof inc导致“number”,则将inc指定给this.value,否则指定1。