要求:验证一个变量str已被定义,是一个字符串,且不为空
背景知识:
var str1 = 'test'; //字符串字面值
var str2 = new String('test'); //String对象
str1 == str2; //true,str2被隐式转换了
str1 === str2; //false
判断需要考虑的问题:
1.存在且类型为字符串、不为空:(typeof str == 'string' && str.length>0),但此种办法忽略了str为对象的情况
2.已定义、不为空:(typeof str != 'undefined' && str.length>0),此种情况忽略了str值为null时,typeof也返回object的情况
3.已定义、不为null(falsy)、不为空:((typeof str != 'undefined' && str) && str.length>0)
4.如果是对象,将其转换为基本类型值:
((typeof str != 'undefined' && str) && (typeof str.valueOf() == 'string' ) && str.length>0)
另:如果忽略第三步,当str为null时会报错,而不是返回false
function isString(str){
if((typeof str != 'undefined' && str) && (typeof str.valueOf() == 'string' ) && str.length>0){
return true;
}else{
return false;
}
};
var test1='hello', test2='', test3=new String('hi'), test4=[1,2], test5=null;
isString(test1); //true
isString(test2); //false
isString(test3); //true
isString(test4); //false
isString(test5); //false