字符串

1、字符串拼接

var name = '我';
var lang = '真开心';
console.log(`${name}今天${lang}`);//我今天真开心

2、逻辑运算

var a = 1;
var b = 2;
console.log(`a + b 的和是: ${a + b}`);     // a + b 的和是: 3
var age = 16;
console.log(`小明是${age > 18 ? '成年人' : '未成年人'}`)
// 小明是未成年人

3、字符串遍历

var str = '哈喽🤪';
for (let item of str) {
  console.log(item);
}
// 哈
// 喽
// 🤪

4、查找一个字符串是否包含另一个字符串(区分大小写)

var str = 'hello world';
console.log(str.includes('hello'));     // true
//从第三个位置查(空格算一个位)
console.log(str.includes('hello', 3));  // false
//当第二个参数是负数时,只要查找的字符串在目标字符串里,无论是多少,都会返回 true。

//如果没有传入值,则默认为undefined
'undefined'.includes('');		  // 返回 true(传入空字符串)
'undefined'.includes(); 	  	 // 返回 true
'undefine'.includes();		  	// 返回 false
'ABC'.includes();	           // 返回 false

//会进行类型转换
let numStr = '2020';
numStr.includes('2');  // true
numStr.includes(2);    // true

//不能对number类型进行判断
let numStr = 2020;
numStr.includes(2);    // Uncaught TypeError: numStr.includes is not a function
//解决方法
let numStr = 2020;
("" + numStr).includes(0) // true

5、startsWith()和endsWith()

//startsWith()用于判断一个字符串,是否以一个指定字符串为起始的。
//endsWith()用来判断当前字符串是否是以另外一个给定的子字符串为结尾。

//startsWith()
const str1 = 'I love China.';
console.log(str1.startsWith('I'));     // true
//从第三个为开头查找
console.log(str1.startsWith('I', 3));  // false


//endsWith()
const str1 = 'Cats are the best!';
//在给定的字符串从左到右一个长度17个字符串进行判断,默认是str.length
console.log(str1.endsWith('best', 17));   // true
const str2 = 'Is this a question';
console.log(str2.endsWith('?'));          // false

//当传入的参数为空时,默认为undefined(不是字符串的undefined)
//以下两条程序是等价的
var str = "I love China.";
console.log(str.endsWith());   // false
console.log(str.endsWith(undefined));	// false

6、repeat()

//对该字符串进行重复操作,但不会改变原字符串。

let str='china'
console.log(str.repeat(2)) // 字符串重复两次 chinachina
console.log(str)  //china
console.log(str.repeat(2.7))//向下取整2, chinachina

/*
		 * 注意
		 * 如果参数为负数或Infinity,且长度大于最长的字符串,会报错
		 * 如果参数在0 到 - 1 或 0 到 1 都会先进行取整运算,所以在这两个范围内都会被 视同为 0。
		 * 如果参数 NaN 等同于 0
		 * 如果 参数是字符串,则会先转换成数字。
		 */

7、padStart()

//padStart()是字符串补全长度(左侧开始位置)

 //(1)拼接字符串(目标最大长度为10)
 "china".padStart(10, 'ilove')    // "ilovechina"
 
 //(2)如果原字符串的长度,等于或小于最大长度,则字符串补全不生效,返回原字符串。
 'china'.padStart(5, 'ab') // 'china'
 'china'.padEnd(2, 'ab') // 'china'

 //(3)如果补全的字符串和原字符串的长度大于目标的长度,补全的字符串会被截取。
 'china'.padStart(7, 'abc') // 'abchina'
 
 //(4)如果补全的字符串和原字符串的长度小于目标的长度,补全的字符串会被重复,多余的部分会被裁剪。
 'china'.padStart(9, 'ab') // 'ababchina'
'china'.padStart(10, 'ab') // 'ababachina'

//(5)如果省略第二个参数,默认使用空格补全长度。
'china'.padStart('7')   // '  china'

//应用场景(补全日期)
var month = String(new Date().getMonth() + 1).padStart(2, '0');	// 09
var date = String(new Date().getDate()).padStart(2, '0'); 			// 15

8、padEnd()

//padEnd()是字符串补全长度(右侧开始位置)

//(1)拼接字符串(目标最大长度为10)
"china".padEnd(10, 'ilove')    // "chinailove" 

//(2)如果原字符串的长度,等于或小于最大长度,则字符串补全不生效,返回原字符串。
'china'.padEnd(5, 'ab') // 'china'
'china'.padEnd(2, 'ab') // 'china'

//(3)如果补全的字符串和原字符串的长度大于目标的长度,补全的字符串会被截取。
'china'.padEnd(7, 'abc') // 'chinaab'

//(4)如果补全的字符串和原字符串的长度小于目标的长度,补全的字符串会被重复,多余的部分会被裁剪。
'china'.padEnd(9, 'ab') // 'chinaabab'
'china'.padEnd(10, 'ab') // 'chinaababa'

//(5)如果省略第二个参数,默认使用空格补全长度。
'china'.padEnd('7')   // 'china  '


//应用场景(补全时间戳的毫秒)
let timestamp = 1581828518
timestamp = String(timestamp).padEnd(13, '0'); // 1581828518000

9、trim()

//从一个字符串的两端删除空白字符。

var str = '   china  ';
console.log(str.trim());  // 'china'

const str = '  china  ';
str.trim() 			// "china"
str.trimStart() 	// "china  "
str.trimEnd() 		// "  china"