验证一个变量已经定义,并且是一个不为空的字符串
最简单的解决办法是:
if(typeof unknownVariable === 'string'
&& unknownVariable.length > 0)
...
这种做法吧字符串测试和长度测试组合起来,确保了变量是一个长度大于0的字符串,但这只能检查变量是字符串字面量,当检测变量是一个字符串对象:
let str = new String('test');
那么str
的typeof
是object
,所以我们需要重新考虑。
- 首先,确保变量不是未定义:
if(typeof unknownVariable != 'undefined')
...
- 然后我们需要确保变量不为
null
,因为null
变量的typeof
为object
:
if(typeof unknownVariable != 'undefined'
&& unknownVariable )
...
- 非空判断使用
length
:
if((typeof unknownVariable != 'undefined'
&& unknownVariable )
&& unknownVariable.length > 0)
...
但是Array
对象也存在length
,我们需要确保测试变量不是一个数组,这需要借助一个对象方法valueOf()
,这个方法所有JavaScript对象都可以使用。
如果变量是一个String
对象,valueOf()
返回字符串字面值,如果变量已经是一个字符串字面值,则valueOf()
方法返回的是string
字符串(valueOf()
方法临时将字面值包装到一个String
对象中),所以测试方法是:
if(((typeof unknownVariable != 'undefined'
&& unknownVariable)
&& unknownVariable.length > 0)
&& typeof unknownVariable.valueOf() === 'string')
...
所以,判断一个非空已经存在的字符串变量,严格的判断写法为:
if(((typeof unknownVariable != 'undefined'
&& unknownVariable)
&& unknownVariable.length > 0)
&& typeof unknownVariable.valueOf() == 'string')
...
网友评论