ES6 String、对象、数组新增
String
字串的识别
-
includes():返回布尔值,判断是否找到参数字符串。
-
startsWith():返回布尔值,判断参数字符串是否在原字符串的头部。
-
endsWith():返回布尔值,判断参数字符串是否在原字符串的尾部。
//includes var str="hello,华清远见" var re1=str.includes("华清") var re2=str.includes(" ") var re3=str.includes("") console.log(re1,re2,re3)//true false true //startsWith与endsWith var str="6598257298502739" var str2=str.startsWith("59",1)//第二个参数 从哪里第一位往后数,是开头 var str3=str.endsWith("2985",11)//第二个参数 从哪里最后一位往前数,是结尾 console.log(str2,str3)//true true注意:
- 如果需要返回子串的位置,还是要用indexOf和 lastIndexOf 。
- 这三个方法如果传入了正则表达式而不是字符串,会抛出错误。而 indexOf 和 lastIndexOf 这两个方法,它们会将正则表达式转换为字符串并搜索它。
字符串重复
console.log("Hello,".repeat(2)); // "Hello,Hello," var str="花园花苑888" var str="*".repeat(str.length) console.log(str2)//*******
字符串补全
-
padStart:返回新的字符串,表示用参数字符串从头部补全原字符串。
-
padEnd:返回新的字符串,表示用参数字符串从尾部补全原字符串。
console.log("h".padStart(5,"o")); // "ooooh" console.log("h".padEnd(5,"o")); // "hoooo" console.log("h".padStart(5)); // " h" //常用于补全位数 console.log("123".padStart(10,"0")); // "0000000123"
模板字符串
function f(){ return "I’m fun!"; } let string2= `Hello,${f()}`; console.log(string2); // Hello,I’m fun!
对象
对象字面量
var count=20 //var obj={count:count}//{"count":count} var obj={count} var {age}={age:20} console.log(obj["count"]) const age = 12; const name = "Amy"; const person = {age, name}; console.log(person); //{age: 12, name: "Amy"}方法也可以简写。
const person = { sayHi(){ console.log("Hi"); } } person.sayHi(); //"Hi"
var obj = { name: "karen",//常用写法 "age":20,//标准写法, ["hello"+100]:90,//es6写法 [false]:90,//es6写法 [{life:100}]:90,//es6写法, [Symbol(100)]:200 } console.log(obj)注意点:属性的简洁表示法和属性名表达式不能同时使用,否则会报错。
对象的扩展运算符
拓展运算符(...)用于取出参数对象所有可遍历属性然后拷贝到当前对象。
-
基本用法
let person = {name: "Lilly", age: 16}; let someone = { ...person }; console.log(someone); //{name: "Lilly", age: 16}
- 可用于合并两个对象
let age = {age: 16}; let name = {name: "Lilly"}; let person = {...age, ...name}; console.log(person); //{age: 16, name: "Lilly"}
注意:自定义的属性和拓展运算符对象里面属性的相同的时候
- 自定义的属性在拓展运算符后面,则拓展运算符对象内部同名的属性将被覆盖掉。
- 自定义的属性在拓展运算度前面,则变成设置新对象默认属性值。
- 拓展运算符后面是空对象,没有任何效果也不会报错。
- 拓展运算符后面是null或者undefined,没有效果也不会报错。
let b = {...null, ...undefined, a: 1, b: 2}; console.log(b); //{a: 1, b: 2}
对象的新静态方法
Object.is(value1, value2):用来比较两个值是否严格相等,与(===)基本类似。//一是+0不等于-0 Object.is(+0,-0); //false +0 === -0 //true //二是NaN等于本身 Object.is(NaN,NaN); //true NaN === NaN //false
数组
数组创建
console.log(Array.of(1, 2, 3, 4)); // [1, 2, 3, 4] // 参数值可为不同类型 console.log(Array.of(1, '2', true)); // [1, '2', true] // 参数为空时返回空数组 console.log(Array.of()); // []Array.from():将类数组对象或可迭代对象转化为数组。
// 参数为数组,返回与原数组一样的数组 // 参数含空位 console.log(Array.from([1, , 3])); // [1, undefined, 3]
参数说明:Array.from(arrayLike[, mapFn[, thisArg]])
-
arrayLike:想要转换的类数组对象或可迭代对象。
- mapFn:可选,map 函数,用于对每个元素进行处理,放入数组的是处理后的元素。
- thisArg:可选,用于指定 map 函数执行时的 this 对象。
let arr = Array.from({ 0: '1', 1: 3, length: 2 }); console.log(); // ['1', 3] // 没有 length 属性,则返回空数组 let array = Array.from({ 0: '1', 1: 3, }); console.log(array); // [] // 元素属性名不为数值且无法转换为数值,返回长度为 length 元素值为 undefined 的数组 let array1 = Array.from({ a: 1, b: 2, length: 2 }); console.log(array1); // [undefined, undefined]
let str = 'abc'; console.log(Array.from(str)); // ["a", "b", "c"]
扩展的方法
查找:
- find():查找数组中符合条件的元素,若有多个符合条件的元素,则返回第一个元素。
let arr = Array.of( 2, 3, 4, 5, 6); console.log(arr.find(item => item > 2)); // 3 // 数组空位处理为 undefined console.log([, 1].find(n => true)); // undefined
- findIndex():查找数组中符合条件的元素索引,若有多个符合条件的元素,则返回第一个元素索引。
var arr=[10,304,50] var re=arr.findIndex(function(el){ if(el>18){return true} }) console.log(re)//1
填充:
-
fill():将一定范围索引的数组元素内容填充为单个指定的值。
var arr=[10,203,4,100,3004,5] var arr2=arr.fill("hello",2,4)//2 3 //参数1:用来填充的值 // 参数2:被填充的起始索引 // 参数3(可选):被填充的结束索引,默认为数组末尾 console.log(arr,arr2,arr==arr2) //(6) [10, 203, 'hello', 'hello', 3004, 5] (6) [10, 203, 'hello', 'hello', 3004, 5] true
遍历:
-
entrys():遍历键值对。
- keys():遍历键名。
- values():遍历键值
包含:
- includes():数组是否包含指定值。注意:与 Set 和 Map 的 has 方法区分;Set 的 has 方法用于查找值;Map 的 has 方法用于查找键名。返回值为布朗值。参数1:包含的指定值;参数2:可选,搜索的起始索引,默认为0;NaN 的包含判断为true。
嵌套数组转一维数组:
-
flat()
console.log([1 ,[2, 3]].flat()); // [1, 2, 3] // 指定转换的嵌套层数 console.log([1, [2, [3, [4, 5]]]].flat(2)); // [1, 2, 3, [4, 5]] // 不管潜逃多少层 console.log([1, [2, [3, [4, 5]]]].flat(Infinity)); // [1, 2, 3, 4, 5] // 自动跳过空位 console.log([1, [2, , 3]].flat());<p> // [1, 2, 3]
扩展运算符(...)
复制数组:let arr = [1, 2], arr1 = [...arr]; console.log(arr1); // [1, 2] // 数组含空位 let arr2 = [1, , 3], arr3 = [...arr2]; console.log(arr3); [1, undefined, 3]合并数组:
var arr1=[1, 2]; var arr2=[3, 4]; console.log([...arr1,...arr2]); // [1, 2, 3, 4]