1

我收到类型错误字符串为空,

我正在检查这样的字符串:

if (typeof s != 'undefined' || s.length){
        var j = JSON.stringify(
            s.split(',').reduce(function(m,v) {
               var t = v.split(':');
               m[t[0]] = t[1];
               return m;
            }, {})
         );
}

但它仍然显示类型错误,告诉我如何不运行此功能null

4

2 回答 2

1

要检查空字符串,您可能应该尝试以下操作:

if(s)
{}

至于空字符串,以你的方式检查长度应该没问题,并且可能比===or更快==

于 2013-08-17T08:40:16.593 回答
1

首先nullandundefined是两个不同的值,因此要使短路起作用,您需要同时测试 undefined 和 null 您不需要 typeof 函数,因为您可以简单地做

if(s != undefined && s != null && s.length)

这会更改代码中的逻辑,因为您正在测试,||但在您的情况下总是会失败(只有在 s 的类型未定义时才会使用它)

但是,因为 null 和 undefined 都是假值。用作布尔表达式,它们都评估为 false 你可以简单地做

if(s && s.length){
}

JS中有不少虚假值

  • 空值
  • 不明确的
  • "" //空字符串
  • 0
  • 错误的

最后一个是唯一真正的假值,所以如果你这样做,value === false只有这五个中的最后一个将评估为真,因为它们在一个条件下都将评估为假

任何具有长度的字符串也是一个真实值,有一个有点令人惊讶的值评估为 true,"false"因为所有长度 > 0 的字符串都将评估为 true,上述 if 失败的唯一方法是如果没有长度属性。那就是如果它不是字符串(或数组或任何其他具有长度属性的类型)。

因此,您可以完全删除长度测试

if(s){
}

或明确表明您正在测试字符串

if(s && typeof s === "string"){
}
于 2013-08-17T08:46:11.047 回答