什么是(foo?bar:fobar)||xyz;在javascript中执行

What does ( foo ? bar: fobar) || xyz; do in javascript?

本文关键字:xyz javascript 执行 fobar foo bar 什么      更新时间:2023-09-26

In使用JavaScript获取图像的实际宽度和高度?(在Safari/Chrome中(,一个声称聪明的解决方案是关于如何计算图像的实际大小。

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

我想弄清楚第二排是干什么的。我知道我想要使用的源,因此简单地声明了它。这没有产生任何其他属性,如t.width.

与相同

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

首先,我们检查哪里有类似getAttribute的东西,一些属于img_element的字段/方法。事实上,严格地说,这个检查是不够的,因为getAttribute可以是任何东西,当我们检查它是否等于true时,我们试图调用getAttribute,就好像它是一个函数一样,这不是我们的检查所保证的。

但我们假设,如果某个对象有getAttribute,那么它就是一个DOM函数,而不是其他函数。在javascript中,这样的假设非常常见。

因此,我们首先检查img_element是否有getAttribute,如果有,我们检查"src"属性。这是一根真实的绳子,那么我们就到此为止了。如果没有,我们将进行最后一次尝试,直接检查.src。

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

它将测试img_element.getAttribute ? img_element.getAttribute("src") : false)是否等于false 以外的值

如果测试为false,则测试img_element.src是否为false否则返回错误

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

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