当string可能为null时,确定Node JS中的字符串长度

时间:2012-05-17 12:26:51

标签: javascript string node.js if-statement null

我正在尝试学习Node并具有以下功能:

this.logMeIn = function(username,stream) {
  if (username === null || username.length() < 1) {
    stream.write("Invalid username, please try again:\n\r");
    return false;
  } else {
  ....etc

我正在传递

if (!client.loggedIn) {
  if (client.logMeIn(String(data.match(/\S+/)),stream)) {

我已经尝试了==和===,但我仍然遇到错误,因为用户名没有检测到它是null,而username.length()失败了:

if (username === null || username.length() < 1) {
                                  ^
TypeError: Property 'length' of object null is not a function

我确信Node不会评估||的第二部分在if语句中,当第一部分为true时 - 但我无法理解为什么if语句的第一部分在username为null对象时评估为false。有人能帮助我理解我做错了吗?

4 个答案:

答案 0 :(得分:8)

length是一个属性,而不是一个函数。试试username.length

答案 1 :(得分:5)

您将String(data.match(/\S+/))作为username参数传递,因此当data.match(/\S+/)null时,"null"不会null username 1}},as:

String(null) === "null"

所以你需要改变你的状况:

if( username === null || username === "null" || username.length < 1 )

答案 2 :(得分:1)

如果您需要非空字符串,则可以执行简单的“真理”检查,该检查适用于nullundefined''等:

if (username) { ... }

使用这种方法,您甚至不需要.length检查。此外,length是属性,而不是方法。


编辑:你有一些蠢事。我认为你需要从你的用户名传递方式开始 - 我不认为你的String(data.match(/\S+/))逻辑表现得像你期望的那样(感谢@Engineer发现这一点)。

您的匹配表达式将返回一种或两种类型的值:nullArray。如果它是null,正如@Engineer所指出的那样,你最终会以"null"作为字符串传递,这应该会在稍后通过你的用户名检查。您应该考虑将其修改为:

if (!client.loggedIn) {
    var matches = data.match(/\S+/);
    if (client.logMeIn(matches ? matches[0] : '',stream)) {

关于.length在所有情况下都等于1 - 这实际上并没有多大意义。我建议添加很多console.log()语句来尝试找出正在发生的事情。

答案 3 :(得分:1)

尝试

if(username === null || username.toString()。length&lt; 1)

我使用if(username === null || username.length&lt; 1)并且检查失败。