什么(foo?bar:fobar)|| XYZ;在javascript中做什么?

时间:2013-05-16 14:53:28

标签: javascript

Get the real width and height of an image with JavaScript? (in Safari/Chrome)中,一个声称聪明的解决方案是如何找出图像的实际大小。

var t = new Image();
t.src = (img_element.getAttribute ? img_element.getAttribute("src") : false) || img_element.src;

我想弄清楚第二行的作用。我知道我想要使用的来源,因此只是声明它。这不会导致任何其他属性,例如t.width。

4 个答案:

答案 0 :(得分:1)

相同
if(foo){ 
    if(bar) {
         bar;
    }
    else {
        xyz;
    }
else {
    if(fobar) {
          fobar;
    }
    else {
        xyz;
    }
}

在你的真实案例中fobar是假的

if(foo){ 
    if(bar) {
         bar;
    }
    else {
        xyz;
    }
else {
    xyz;
}

所以

if(foo && bar) {
    bar;
}
else {
    xyz;
}

答案 1 :(得分:1)

首先,我们检查哪里有像getAttribute这样的东西,某些字段/方法属于img_element。实际上,这个检查严格地判断是不够的,因为getAttribute可以是字面上的任何东西,并且,当我们检查它等于true时,我们然后尝试调用getAttribute,就好像它是一个函数,这不是由我们的支票。

但我们假设如果某个对象具有getAttribute,则它是一个DOM函数而不是其他东西。在javascript中,这种假设很常见。

因此,我们首先检查img_element是否具有getAttribute,如果有,我们检查“src”属性。它是一个真正的字符串然后我们在这里完成。如果没有,我们通过直接检查.src进行最后一次尝试。

您提供的代码段实际上是关于我们应首先检查属性然后直接检查字段。

答案 2 :(得分:0)

它会测试img_element.getAttribute ? img_element.getAttribute("src") : false)是否等于false

以外的其他内容

如果测试等于false,则测试img_element.src是否为false  否则返回false

答案 3 :(得分:0)

var x = false,
    y = x || true;

在这种情况下,y将为真,它是OR运算符,它会检查第一个 OR 秒(按此顺序)是true ;如果两者都是false,则返回false。否则,返回第一个true元素。