Javascript 如果node.js中的语句错误,则为NULL

Javascript 如果node.js中的语句错误,则为NULL,javascript,node.js,Javascript,Node.js,我正在使用Node.js,我创建了一个如下所示的函数: function makeTitleWith(name) { if (name === null) { return "Hello, welcome to my app!" } else { return "Hello, welcome " + name + "!" } } 当我用null变量调用它时,它返回“你好,欢迎null!”。我是JS的新手,这让我发疯。我也尝试了==而不是==

我正在使用Node.js,我创建了一个如下所示的函数:

function makeTitleWith(name) {
   if (name === null) {
         return "Hello, welcome to my app!"
   } else {
         return "Hello, welcome " + name + "!"
   }
}
当我用null变量调用它时,它返回
“你好,欢迎null!”
。我是JS的新手,这让我发疯。我也尝试了
==
而不是
==
,但是没有什么区别

当我用一个null变量调用它时,它返回“你好,欢迎null!”

这意味着你不是用
name
设置为
null
来调用它,而是用
name
设置为
“null”
来调用它(或者我稍后将讨论不太可能的第二种可能性)<代码>“null”不等于
null
(或者
=
或者
==

例如:

函数makeTitleWith(名称){
if(name==null){
return“你好,欢迎使用我的应用程序!”
}否则{
返回“你好,欢迎”+姓名+“!”
}
}
log(makeTitleWith(“null”);
//或者更可能:
var n=字符串(null);
console.log(makeTitleWith(n))
当我用一个null变量调用它时,它返回“你好,欢迎null!”

这意味着你不是用
name
设置为
null
来调用它,而是用
name
设置为
“null”
来调用它(或者我稍后将讨论不太可能的第二种可能性)<代码>“null”
不等于
null
(或者
=
或者
==

例如:

函数makeTitleWith(名称){
if(name==null){
return“你好,欢迎使用我的应用程序!”
}否则{
返回“你好,欢迎”+姓名+“!”
}
}
log(makeTitleWith(“null”);
//或者更可能:
var n=字符串(null);

console.log(makeTitleWith(n))我建议您可以这样修改上述代码(更像是防御编码),并期望/强制调用方将字符串值作为输入参数发送到函数

if(typeof name == "string"){
    return "Hello, welcome " + name + "!";
}
return "Hello, welcome to my app!";

另外请注意,如果调用方使用null或空对象调用函数,在这两种情况下,typeof操作符都返回object。因此,根据您的情况,我不认为该方法是使用null或空对象调用的。

我建议您可以像这样修改上述代码(更像是防御性编码),并期望/强制调用方将字符串值作为输入参数发送给函数

if(typeof name == "string"){
    return "Hello, welcome " + name + "!";
}
return "Hello, welcome to my app!";

另外请注意,如果调用方使用null或空对象调用函数,在这两种情况下,typeof操作符都返回object。因此,根据您的情况,我不认为该方法是使用null或空对象调用的。

@t.J.Crowder抱歉,它执行另一个块。不是===null的那个。我现在修复了我的问题。然后请添加一个显示实际问题的图标。@andymcculough是的,我也尝试过检查未定义,但它没有改变任何东西。如果传递给函数的值是未定义的,它将以未定义而不是null的形式记录到控制台,对吗?请在这里发布console.log(name)返回的内容?@T.J.Crowder抱歉,它执行另一个块。不是===null的那个。我现在修复了我的问题。然后请添加一个显示实际问题的图标。@andymcculough是的,我也尝试过检查未定义,但它没有改变任何东西。如果我传递给函数的值是未定义的,它会以未定义而不是null的形式记录到控制台上,对吗?你能在这里发布console.log(name)返回的内容吗?
“Hello,welcome”+name+“!”
会强制
null
成为字符串。@BenM-会,但不会给出OP的代码,它检查
null
并执行另一个分支。如果是这样的话,防止这种情况发生的最佳方法是什么?我应该编写自己的toString函数,检查值是否为null并防止它被更改为string(并在我的代码中造成灾难),还是每个人都使用某种现有的方法?@user109321948492842303-在转换为string之前执行
null
检查,例如
x=y==null?null:字符串(y)或类似。您可以创建自己的
toNonNullString
函数或类似函数,但如果您提前进行验证,则实际上并不需要它。另外,您可以通过以下命令捕获null、未定义、空字符串和false:
if(name)
“Hello,welcome”+name+!“
null
强制为字符串。@BenM-它会,但它不会给出OP的代码,该代码检查
null
并执行另一个分支。如果是这样,那么防止这种情况发生的最佳方法是什么?我应该编写自己的toString函数,检查值是否为null并防止它被更改为string(并在我的代码中造成灾难),还是每个人都使用某种现有的方法?@user109321948492842303-在转换为string之前执行
null
检查,例如
x=y==null?null:字符串(y)或类似。您可以创建自己的
toNonNullString
函数或类似函数,但如果您提前进行验证,则实际上并不需要它。另外,您可以通过以下命令捕获null、未定义、空字符串和false:
if(name)