es6-05 扩展
一、字符串扩展
包含是否的结果都是true或false;
includes
(str) : 判断是否包含指定的字符串 true|false === indexOf,也可以用于数组;includes是使用全等的;startsWith
(str) : 判断是否以指定字符串开头endsWith
(str) : 判断是否以指定字符串结尾repeat
(count) : 重复指定次数 返回一个新的字符串
javascript 就是由面向对象思想造出来的一个产品 语法是ECMAscript
var s1 = 'abc'//字面量形式创建一个字符串类型的数据
虽然是字面量形式创建的字符串,字面量形式创建的数据也能继承 构造函数创建出来的字符串对象 的特性
只有对象才有属性和方法
字面量形式创建的字符串 本质上(底层)也是由 new String() 创建出来的
padStart、padEnd
(1)接收两个参数,第一个参数为最小长度,第二个参数为补全字符串;
'1'.padStart(2,'0') //返回 '01'
'1'.padEnd(2,'0') //返回 '10'
(2)如果原字符串等于或大于指定的最小长度,则返回原字符串;
'10'.padStart(2,'0') //返回 '10'
(3)如果原字符串的长度小于补全字符串的长度,则截去超出位数的补全字符串;
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"
'09-12'.padEnd(10, 'YYYY-MM-DD') // "09-12YYYY-"
二、数字的扩展
isFinite
(i) : 判断是否是有限大的数isNaN
(i) : 判断是否是NaN,两个NaN是不等的;Number.isInteger
(i) : 判断是否是整数parseInt
(str) : 将字符串转换为对应的数值Math.trunc
(i) : 直接去除小数部分,必须是纯数字,如果数字带单位,则会是NAN
三、数组扩展
Array.from
将伪数组对象或可遍历对象转换为真数组,需要一个变量来接收
Array.from(v,[callback])
Array.from转换对象的时候,键名必须写数字下标, 必须加length长度,否则会失败;
一个类数组对象,必须要有length,属性名必须是数值,属性名作为数组的索引号,如果不带length,from转换出来的将是空数组;
Array.from的第二个参数为回调函数,指定返回的数组是什么形式的,参数item,index,arr
const cities = [{id:1,age:18},{id:2,age:20}]
let arr = Array.from(cities,({age})=>age) //[18,20] 返回对象中的每一项
//{age} 第二个参数返回数组的每一项,也可以不填写;
小括号中代表每一个对象,使用对象解构,将年龄返回出来;如果是返回一个对象,则键名需要以[]中括号形式返回;
Array.of
将一系列值转换成数组,和new Array传值是一样的
Array.of(v1, v2, v3) // 将一系列值转换成数组,和new Array传值是一样的;
var arr = Array.of(3) // 这个3不是数组的长度,是一个数组;
Array.fill
使用什么来填充
Array(5).fill('') // 将数组填充5个空字符串;fill填写字符;
四、对象扩展
Object.is
Object.is(v1, v2)
判断2个数据是否完全相等,两个NaN是相等的,普通判断两个NaN是不相等的;
对象浅拷贝
Object.assign(target, source1, source2..)
将源对象的属性复制到目标对象身上,source是源对象;
浅拷贝修改属性值之后,源对象的值不会被改变,如果是数组或对象,则会被改变;
需要声明一个空对象再进行拷贝;
也可以:let obj3 = Object.assign({},obj1,obj2...)
常用于合并对象;
对象深拷贝
var obj1 = JSON.parse(JSON.stringify(arr/obj))
将对象转换成字符串,再将字符串转换成对象,所以需要一个变量来接收,就是一个新的对象;
数组或对象深拷贝, 函数不能拷贝;
深拷贝原理:(数组,对象都可用)浅拷贝+递归
function deepCopy( obj ){
if( Object.prototype.toString.call( obj ).slice(8,-1) == 'Object' ){
var result = {}
}else if( Object.prototype.toString.call( obj ).slice(8,-1) == 'Array' ){
var result = []
} //判断数据类型类型 如果是数组则初始一个 [] 如果是一个Object则初始一个 {}
//浅拷贝,但是+ 递归思想,就实现了深拷贝
for( var attr in obj ){
if( typeof obj[attr] == 'object'){ //判断传入的键值是否是数组或对象
result[attr] = deepCopy( obj[attr] ) //如果是对象则再调用一次函数; 实现递归;
}else{
result[attr] = obj[attr] //将每一天数据输入进对象或数组;
}
}
return result
}