什么是(foo?bar:fobar)| | xyz;你喜欢javascript吗?

什么是(foo?bar:fobar)| | xyz;你喜欢javascript吗?,javascript,Javascript,在本书中,一个声称聪明的解决方案是关于如何计算图像的实际大小 var t = new Image(); t.src = (img_element.getAttribute ? img_element.getAttribute("src") : false) || img_element.src; 我想知道第二排是干什么的。我知道我想要使用的源代码,因此简单地声明了它。这不会产生任何其他属性,例如t.width。与 if(foo){ if(bar) { bar;

在本书中,一个声称聪明的解决方案是关于如何计算图像的实际大小

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


它将测试是否
img_element.getAttribute?img_element.getAttribute(“src”):false)
等于
false

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

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

在这种情况下,
y
将为true,它是一个
操作符,它检查第一个或第二个是否为
true
;如果两者都是false,则返回false。否则,返回第一个元素
true

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

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

所以,我们首先检查img_元素是否有getAttribute,如果有,我们检查“src”属性。这是一条真实的线,那么我们就到此为止。如果没有,我们将进行最后一次尝试,直接检查.src


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

用foo/bar/fobar的真实值和虚假值为自己试一试。编写一个测试程序。我还是回答了,因为这很有趣,但你真的应该自己做更多。在这种情况下,问题是当你试图确定图像的尺寸时,图像没有被加载。这与天气无关logic@Pumbaa80我也意识到了!谢谢你!但是你忘了作业了?这些ifs是语句,而他的表达式有一个结果值。
var x = false,
    y = x || true;