“你说什么?”&引用;运算符在javascript中与非布尔变量一起使用时的平均值?
在阅读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
代码>用于非布尔变量的运算符。下面是一个未在中使用的代码示例
/**
* 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
}