基本数据类型
- 数字Number
- 字符串String
- 布尔Boolean
- 空对象指针Null
- 未定义undefined
引用数据类型
- 对象数据类型Object
- {} 普通对象
- [] 数组对象
- 正则对象
- Math数学函数对象
- 日期对象
- …
- 函数数据类型Function
String
把其他类型转为字符串
- [val].toString()
- 字符串拼接
1. [val].toString()
基本类型
※ null和undefined禁止直接toString()
引用类型
数组
※ 普通对象.toString()的结果是"[object Object]"
Object.prototype.toString()方法不是转化为字符串,而是用来检测数据类型。
2. 字符串拼接
“+”可以作为字符串拼接符
举个栗子
let a = 10 + null + true + [] + undefined + '哈哈' + null + [] + 10 + false
console.log(a)
分析过程:
10 + null => 10 + 0 => 10
10 + true => 10 + 1 => 11
11 + [] => 11 + ‘’ => ‘11’ (引用类型转化为数字,是先将其toString()转为字符串 -> 空数组变为空字符串后,直接与11拼接)
‘11’ + undefined => ‘11undefined’
‘11undefined’ + ‘哈哈’ + null => ‘11undefined哈哈null’
‘11undefined哈哈null’ + [] => ‘11undefined哈哈null’ + ‘’
‘11undefined哈哈null’ + 10 + false => 11undefined哈哈null10false
另外:
let a = true + null + 10 + undefined
console.log(a)
※ 结果是NaN,因为 undefined 在转为Number后,是NaN
字符串中常用方法
基本方法:
let str = 'sfasdadgadgasdfadghj';
str.length //=> 字符串长度
str[0] //=> 获取第一个字符
//循环输出每个字符
for(let i=0;i<str.length;i++)
{
let char = str[i];
console.log(char);
}
//获取指定位置的字符
console.log(str.charAt(4));
//d
console.log(str.charAt(1000));
//""
//获取指定位置的字符ASCII值
console.log(str.charAt(4));
//100
console.log(str.charAt(1000));
//NaN
1. 字符串截取 substr / substring / slice
- substr(n,m) 从索引n开始截取m个字符
- substring(n,m) 从索引n开始找到索引为m处,不含m
- slice(n,m) 和substring一样,都是找到索引m处,但它可以支持负数为索引
m不写截取至末尾
let str = 'sfasdadgadgasdfadghj';
console.log(str.substr(3,7)); //sdadgad
console.log(str.substring(3,7));//sdad
console.log(str.slice(3,7));//sdad
console.log(str.substring(-7,-3));//""
console.log(str.slice(-7,-3));//dfad
2. 验证字符是否存在 indexOf / lastIndexOf
- indexOf(x,y) 获取x第一次出现位置的索引,y是控制查找的起始位置索引
- lastIndexOf(x) 最后次出现位置的索引
- includes
没有这个字符,返回-1
let str = 'abcdefg';
console.log(str.indexOf('bc')); //1
console.log(str.indexOf('a',5));//-1
console.log(str.includes('@')) //false
3. 字母大小写转换 toUpperCase / toLowerCase
- str.toUpperCase() 转大写
- str.toLowerCase() 转小写
将第一个字母转为大写
let str = 'sfasdadgadgasdfadghj';
str = str.substr(0,1).toLocaleUpperCase() + str.substr(1);
console.log(str);
//Sfasdadgadgasdfadghj
3. 把字符串按指定的分隔符拆分为数组 split (和数组中的join相反)
let str = '哈哈|呵呵|嘻嘻';
console.log(str.split('|'));
// ["哈哈", "呵呵", "嘻嘻"]
4. 字符串替换 replace
- replace(老字符,新字符)
在不使用正则的情况下,每次只替换一个字符
let str = '哈哈@呵呵@嘻嘻';
console.log(str.replace('@',','));
//哈哈,呵呵@嘻嘻
console.log(str.replace(/@/g,','));
//哈哈,呵呵,嘻嘻
实现一些常用的需求
1. 获取一个URL地址问号后面传递的参数信息 queryURLParammeter
let str = 'https://www.bilibili.com/video/BV1R442?p=16&name=limy&en=leopard#box';
let str1 = 'https://www.bilibili.com/video/BV1R442#box';
let str2 = 'https://www.bilibili.com/video/BV1R442?p=16&name=limy&en=leopard';
let str3 = 'https://www.bilibili.com/video/BV1R442';
//普通方法
function getQueryURLParams(url){
let result = {};
let str = url;
if(str.includes('#'))
{
result['HASH'] = str.split('#')[1];
str = str.split('#')[0];
}
if(str.includes('?'))
{
str = str.split('?')[1];
let askArr = str.split('&');
askArr.forEach(element => {
result[element.split('=')[0]] = element.split('=')[1];
});
}
return result;
}
//正则
function getQueryURLParams(url){
let result = {};
let reg1 = /([^?=&#]+)=([^?=&#]+)/g,
reg2 = /#([^?=&#]+)/g;
url.replace(reg1,(n,x,y) => result[x] = y);
url.replace(reg2,(n,x) => result['HASH'] = x);
return result;
}
console.log(getQueryURLParams(str));
//{HASH: "box", p: "16", name: "limy", en: "leopard"}
console.log(getQueryURLParams(str1));
//{HASH: "box"}
console.log(getQueryURLParams(str2));
//{p: "16", name: "limy", en: "leopard"}
console.log(getQueryURLParams(str3));
//{}
2.四位随机验证码