ES6语法之字符串新特性

padStart padEnd

padStart()用于头部补全,如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串

{
	let str = 'i';

	let str1 = str.padStart(5, 'mooc');
	console.log(str1);

	let str2 = str.padEnd(5, 'mooc');
	console.log(str2);
}

repeat

repeat()方法返回一个新字符串,表示将原字符串重复n次,参数如果是小数,会被取整

{
	function repeat(str, num) {
		return new Array(num + 1).join(str);
	}
	console.log(repeat('s', 3));
}

startsWith endsWith

检测字符串是否以指定的子字符串开始/结尾。
返回值:boolean

{
	const str = 'A promise is a promsie';

	console.log(str.startsWith('B'));
	console.log(str.startsWith('A pro'));

	console.log(str.endsWith('promsie'));
	console.log(str.endsWith('A'));
}

includes

includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false

{
	const str = 'A promise is a promise';

	// if (str.indexOf('promise') !== -1) {
	if (~str.indexOf('promise')) {
		console.log('存在1');
	}

	if (str.includes('a promise')) {
		console.log('存在2');
	}
}

这里的~运用了位运算符
以下参考:https://javascript.ruanyifeng.com/grammar/operator.html#toc19
二进制否运算符
二进制否运算符(~)将每个二进制位都变为相反值(0变为1,1变为0)。它的返回结果有时比较难理解,因为涉及到计算机内部的数值表示机制。

~ 3 // -4

上面表达式对3进行二进制否运算,得到-4。之所以会有这样的结果,是因为位运算时,JavaScirpt 内部将所有的运算子都转为32位的二进制整数再进行运算。

3的32位整数形式是00000000000000000000000000000011,二进制否运算以后得到11111111111111111111111111111100。由于第一位(符号位)是1,所以这个数是一个负数。JavaScript 内部采用补码形式表示负数,即需要将这个数减去1,再取一次反,然后加上负号,才能得到这个负数对应的10进制值。这个数减去1等于11111111111111111111111111111011,再取一次反得到00000000000000000000000000000100,再加上负号就是-4。考虑到这样的过程比较麻烦,可以简单记忆成,一个数与自身的取反值相加,等于-1。

~ -3 // 2

上面表达式可以这样算,-3的取反值等于-1减去-3,结果为2。

对一个整数连续两次二进制否运算,得到它自身。

~~3 // 3

所有的位运算都只对整数有效。二进制否运算遇到小数时,也会将小数部分舍去,只保留整数部分。所以,对一个小数连续进行两次二进制否运算,能达到取整效果。

~~2.9 // 2
~~47.11 // 47
~~1.9999 // 1
~~3 // 3

使用二进制否运算取整,是所有取整方法中最快的一种。

对字符串进行二进制否运算,JavaScript 引擎会先调用Number函数,将字符串转为数值。

// 相当于~Number('011')
~'011'  // -12
// 相当于~Number('42 cats')
~'42 cats' // -1
// 相当于~Number('0xcafebabe')
~'0xcafebabe' // 889275713
// 相当于~Number('deadbeef')
~'deadbeef' // -1

Number函数将字符串转为数值的规则,参见《数据的类型转换》一章。

对于其他类型的值,二进制否运算也是先用Number转为数值,然后再进行处理。

// 相当于 ~Number([])
~[] // -1

// 相当于 ~Number(NaN)
~NaN // -1

// 相当于 ~Number(null)
~null // -1
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值