if(foo!==null)的计算结果为true,即使foo为null
if (foo !== null) evaluates to true, even when foo is null
在javascript中,我有一个日志输出选项,允许使用元素/选择器来指定输出日志/错误消息的位置。初始化时输出的格式如下:
var $messageOutput = options.messageOutputElement ? $(options.messageOutputElement) : null;
稍后通过日志功能使用:
function outputMessage(msg)
{
if ($messageOutput !== null)
{
messageNum++;
var $messageOutput = $(options.messageOutputElement);
var html = $messageOutput.html();
html += '<b>' + messageNum + '</b><br/>' + msg + '<br/>';
$messageOutput.html(html);
$messageOutput.scrollTop($messageOutput[0].scrollHeight);
}
}
问题是,即使$messageOutput==为null,outputMessage()中的if语句也会失败。我已经用Chome的调试器验证了$messageOutput确实等于null。事实上,它无论如何都会进入if语句。
有人能告诉我为什么会发生这种情况吗?提前感谢您对此事的任何意见。
通过在函数的作用域中声明"var$messageOutput",可以停止在全局作用域中引用变量。因此,它不是指它,而是指函数体中尚未设置的变量,该变量是未定义的,而不是null。您可能应该删除"var$messageOutput=$(options.messageOutputElement);"的"var"部分,这将使函数引用函数外的$messageOutput。
详细说明一下:"var"在您所在的范围内创建了一个新变量,为了增加混乱,类似"var foo=function"的行为与"function foo"不同。以下是一些有趣的案例&解读你的阅读乐趣:
var x = 5;
function f () {
console.log(x):
if (!x) {
var x = 22;
}
return x;
}
function g () {
console.log(x):
if (!x) {
x = 22;
}
return x;
}
f(); // prints nothing, and returns 22
g(); // prints 5, and returns the same value
有时您还需要注意的是,您可以在全局范围之外的声明之前引用函数,这取决于它的声明方式。例如:
function f () {
console.log(f_sub);
function f_sub () {
return "subfunction of f";
}
return f_sub;
}
function g() {
console.log(g_sub);
var g_sub = function () {
return "subfunction of g";
}
return g_sub;
}
f(); // prints and returns f_sub
g(); // prints undefined and returns g_sub
传统的函数声明可以在任何地方进行,也可以在任何位置引用,但将函数分配给变量意味着在执行完行之前不能引用它。
相关文章:
- 数组在递归方法中设置为null
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 无法获取属性'selectedIndex'的未定义引用或null引用
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 来自文本输入null的html javascript变量
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- php代码在textbox更改事件上显示null
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- 在php中提交数据时,如果某些值为null,而某些值为非null,如何进行查询
- 未捕获的类型错误:无法读取属性'addEventListener'的null chrome扩展名
- 为什么localStorage[“..”]未定义,而localStorage.getItem(“..”)为null
- ajax在输入等于null时进行检查
- html+javascript:如何在某些条件下禁用dropdownlist中的null选项
- 未捕获的类型错误:无法读取属性'状态'在react中为null
- contentWindow.document.body is null
- 在经过DATE验证的列中创建null值
- 为什么是文档.旧版应用程序中的DOM-object.properties为null
- if(foo!==null)的计算结果为true,即使foo为null
- javascript错误& Cannot read property 'foo'null"而且
- document.getElementById("#foo"); returns null