新增API
(1)includes(), startsWith(), endsWith()(常用)
这么说吧,其实在java jdk1.6 就已经出现了startsWith和endsWith。而且分别常用与判断字符串开始和文件后缀。至于includes我知识点暂时不知道,不知道是不是js独有的,但是觉得所有api都肯定有其他出处,就好像一个好的模式、好的特性最后都会出现在所有平台一样。redux是这样,Lamda表达式也是这样。
includes 和indexOf区别
(1)indexOf 方法,返回是下标,number类型。而includes 是返回boolean
你的逻辑如果不需要知道下标,直接用includes吧。当然你要是觉得写s.indexOf(‘xy’)>-1 习惯了。我也不好说什么
至于startsWith和endsWith直接看例子吧。
const s = 'Hello world!';
console.warn(s.startsWith('Hello')); // true
console.warn(s.endsWith('!')); // true
console.warn(s.includes('o')); // true
console.warn(s.indexOf('xy')); // -1
这三个方法都支持第二个参数,表示开始搜索的位置
const s = 'HelloWorld!';
console.warn(s.startsWith('World', 5)); // true
console.warn(s.endsWith('H', 1)); // true
console.warn(s.includes('Hello', 1)); // false
上面代码表示,使用第二个参数n 时, endsWith 的行为与其他两个方法有所不同。
它针对前n 个字符,而其他两个方法针对从第n 个位置直到字符串结束。
(2)repeat()
repeat 方法返回一个新字符串,表示将原字符串重复n 次。
console.warn('x'.repeat(3)); // "xxx"
console.warn('Hello'.repeat(2)); // "HelloHello"
console.warn('na'.repeat(0)); // ""
参数如果是正小数,会被向下取整。
参数如果是-1到0小数,会被向上取整为0。
参数如果是字符串,会被先转化为数字。
console.warn('na'.repeat(2.9)); // "nana";
console.warn('na'.repeat(-0.9)); // "";
console.warn('ha'.repeat('2')); // haha;
特殊情况:
参数如果是NaN,会被转化为0(string转Number失败)。
参数如果是-1及以下小数,会报错。
参数如果是Infinity,会报错。
console.warn('ha'.repeat(NaN)); // "";
console.warn('na'.repeat(-2.9));
// RangeError: Invalid count value;
console.warn('na'.repeat(Infinity));
// RangeError: Invalid count value
(3)padStart(), padEnd()
ES7推出了字符串补全长度的功能。
如果某个字符串不够指定长度,会在头部或尾部补全。
padStart 用于头部补全, padEnd 用于尾部补全。
const str = 'hello';
console.log(str.padStart(7,'*')); //**hello
console.log(str.padEnd(7, '*')); //hello**
上面代码中,
padStart 和padEnd 一共接受两个参数,第一个参数用来指定字符串的最小长度,第二个参数是用来补全的字符串。
如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。
如果省略第二个参数,则会用空格补全长度。
(4)模板字符串(常用)
传统的JavaScript语言,输出模板通常是这样写的。
$("#testId").append(
"<h1>" + basket.count + "</h1> "
);
上面这种写法相当繁琐不方便, ES6引入了模板字符串解决这个问题。
$("#testId").append(
`<h1>${basket.count}</h1>`
);
规则:
(1)模板字符串(template string)是增强版的字符串,用反引号(`)标识。
(2)在模板字符串中需要使用反引号,则前面要用反斜杠转义。
var greeting = `\`Yo\` World!`;
(3)表示多行字符串,所有的空格和缩进都会被保留在输出之中。
(4)模板字符串中嵌入变量,需要将变量名写在${} 之中。
(5)大括号内部可以放入任意的JavaScript表达式,可以进行运算,以及引用对象属性。
const x = 1;
const y = 2;
console.error(`${x} + ${y} = ${x + y}`); // "1 + 2 = 3"
console.error(`${x} + ${y * 2} = ${x + y * 2}`); // "1 + 4 = 5"
const obj = {x: 1, y: 2};
console.error(`${obj.x + obj.y}`);// 3
(6) 模板字符串之中还能调用函数。
const fn = () => "Hello World";
console.log(`foo ${fn()} bar`);// foo Hello World bar