Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“你说什么?”&引用;运算符在javascript中与非布尔变量一起使用时的平均值?_Javascript_Operators - Fatal编程技术网

“你说什么?”&引用;运算符在javascript中与非布尔变量一起使用时的平均值?

“你说什么?”&引用;运算符在javascript中与非布尔变量一起使用时的平均值?,javascript,operators,Javascript,Operators,在阅读javascript代码时,我看到了用于非布尔变量的运算符。下面是一个未在中使用的代码示例 /** * loads a resource from a url * @param {string} url the url of the resource to load * @param {string} relativeTo the url to load relative to * @param {function} callback thefunction to call onc

在阅读javascript代码时,我看到了
用于非布尔变量的运算符。下面是一个未在中使用的代码示例

/**
 * loads a resource from a url
 * @param {string} url the url of the resource to load
 * @param {string} relativeTo the url to load relative to
 * @param {function} callback thefunction to call once the file is loaded
 * @private
 */
 GLGE.Wavefront.prototype.loadFile=function(url,relativeTo,callback){
    if(this.relativeTo && !relativeTo) relativeTo=this.relativeTo; //<-- used on a string?
    else this.relativeTo=url;
    if(!callback) callback=this.loaded;    //<-- used on a function?
    var req = new XMLHttpRequest();
    if(req) {
               // request handling code                
            }
        };
        req.open("GET", url, true);
        req.send("");
    }   
}
/**
*从url加载资源
*@param{string}url要加载的资源的url
*@param{string}relative相对于要加载的url相对于
*@param{function}在加载文件后回调要调用的函数
*@私人
*/
GLGE.Wavefront.prototype.loadFile=函数(url、relativeTo、回调){
如果(this.relativeTo&!relativeTo)relativeTo=this.relativeTo//

当对象未定义时,将返回false,等于null或0,否则返回true。

任何falsy值都将满足
如果(!insert_variable_here)
条件,包括:

  • false
  • null
  • 未定义
  • 空字符串
    '
  • 数字
    0
  • NaN
如果
callback
return对这些值中的任何一个进行求值,则该条件将得到满足

即使
null!=false
,以下内容也会向您发出警报:

x = null;
if(!x) {
    alert('"!null" does evaluate to true');
}

不管
null!=false对您或其他任何人是否有意义,关键是在JavaScript中
null
是一个虚假的值,因此是一个满足我上面列出的第一段代码中的条件的值。这似乎是您提出的问题——而不是如果
null
应该或不应该
==false
每个变量和对象都可以等同于
true
false
。对于对象,未定义为false,其他任何值都为true

这实际上给出了一些有趣的边缘情况

一个有点让我震惊的
null!=false
计算结果为
true

更新

请注意,对于所有在第43页的评论中抨击我的人,将
null
的toBoolean转换定义为
false
。因为我们只使用
=
,而没有使用
===
进行类型检查,我发现我非常合理地期望
null==false
计算为
true


该规范于今年6月发布,因此这可能是一个变化,但在这次辩论中,规范编写者似乎站在我这边。

在JavaScript中,一元否定运算符(
)将根据语言的(有些混乱)规则将其操作数转换为布尔值(例如,ECMA-262第5版)。显示了一些类型转换如何发生的示例

基本上,这是一种测试非“真实性”的简单方法;看似虚假的值(例如
false
null
0
NaN
,空字符串等)将在被逻辑求反之前转换为
false
,反之亦然。您可以测试“真实性”通过使用布尔构造函数显式:

Boolean(null); // => false
Boolean(NaN); // => false
Boolean(""); // => false
Boolean(0); // => false
Boolean(1); // = >true
Boolean("123"); // => true
Boolean(new Object()); // => true
Boolean(function(){}); // => true
它的意思是“不”或“假”

这仅仅是一种替代方案:

if (callback != null)
{
     //callback is not null
}

if (callback)
{
    //callback is not null
}


检查我的答案,关于
null
的有趣的边缘大小写。是的,但是
null
在JavaScript中仍然是一个虚假的值。@只有在某些情况下才会清晰地显示。
null==false
计算为
false
,但是
!null
确实计算为true。这一事实根本不会让我大吃一惊……null不等于false自从上大学以来就一直被灌输到我的脑子里。但是@Endophage,我们不是在讨论它应该如何工作,而是在讨论它是如何工作的。我可以建议进一步讨论吗?你忘了一些虚假的价值观。
if (callback != null)
{
     //callback is not null
}

if (callback)
{
    //callback is not null
}
if (this.relativeTo && relativeTo == false)
{
    //some code
}