如何检测存在且非空的字符串
3.检测存在,且非空的字符串
====================
**知识点**
1. typeof操作符
2. length属性
3. valueOf()方法
4. == / ===
------------------------------------------------------
1.typeof操作符
--------------
> 返回变量类型
- 数值: `number`
- 字符串: `string`
- 布尔: `boolean`
- 函数: `function`
- null/数组/对象: `object`
- 未定义: `undefined`
------------------------------------------------------
2.length属性
-----------
- 返回数据的长度
- 适用于*字符串和数组类型*
------------------------------------------------------
3.valueOf()方法
--------------
- 所有对象上均可用
- 返回该对象的基本类型值(未包装过)
- Number/String/Boolean: 返回基本值
- Array/Object/Function: 返回声明字面量
------------------------------------------------------
4.==/===
--------
- `==`: 松散型相等: 仅比较基本类型
- `===`: 严格型相等: 除比较基本类型,还比较包装类型
------------------------------------------------------
### 示例代码: code/demo03.html
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>检查一个存在的非空的字符串</title>
</head>
<body>
<script>
// 有三个条件:1. 已定义, 2. 字符串, 3. 不为空
//1. 最简单的非空判断
var str1; // 等价: var str1 = undefined;
// if (str1.length > 0) {
// console.log('验证通过');
// } else {
// console.log('失败');
// }
// 报错,str1变量未定义,
// 不能检测未定义的变量,所以要将长度检测前必须进行存在性检测
//2. 先检测是否定义,再检测长度
// var str2 = 'peter';
var str2 = 100; // 100是数字,虽定义,但数字没有length属性,仍能正常工作
if (typeof str2 !== 'undefined' && str2.length > 0) {
console.log('验证通过');
} else {
console.log('失败');
}
// 但是直接用'string'做为检测目标会更直观
var str3 = 'admin';
if (typeof str3 === 'string' && str3.length > 0) {
console.log('验证通过');
} else {
console.log('失败');
}
//3. 字符串除了用字面量基本值,还可以用new String()创建
// 应该不管这个字符串是用字面量还是构造器创建,都能正常检测
// 而这个字符对象的类型不是string, 而是object, 而可以返回object还了对象,还有null和数组
// var str4 = 'user';
// var str4 = new String('user'); // 发现仍能正常工作
// var str4 = 100; // 数值工作也正常
var str4 = [1,2,3,4]; // 数组居然也验证通过,不符合要求,我们只允许字符串类型
if ((typeof str4 !== 'undefined' && str4 !== null) && str4.length > 0) {
console.log('验证通过');
} else {
console.log('失败');
}
// 4. valueOf()可以返回对象的基本类型(未包装),用它来确保类型是字符串
var str5 = 'admin';
var str5 = new String('admin');
var str5 = 100;
var str5 = [1,2,3,4]; // 数组未通过测试, 说明检测方式正确
if (((typeof str5 !== 'undefined' && str5 !== null) && (typeof str5.valueOf() === 'string')) && str5.length > 0) {
console.log('验证通过');
} else {
console.log('失败');
}
// 实际开发中, 你可能用不到这么复杂的检测, 大多时候只需要测试存在性和非空即可, 但对于特殊情况下的检测方式,一定要知道
</script>
</body>
</html>
```