JS内置函数的扩展(字符串,数值,数组,对象)
1,字符串扩展:
- includes : 是否包含字符串
- startsWith : 是否以某个字符开头
- endsWith : 是否以某个字符结尾
- repeat : 重复字符串指定的次数
实现一下
let str1 = "qwertyuiop";
console.log(str1.includes("y"));// true
console.log(str1.startsWith("qwer"));//true
console.log(str1.endsWith("op"));//true
console.log("*".repeat(20));//***************************
2,数值的扩展:
- Number.isFinite : 判断是否是有限大
- Number.MAX_VALUE : 数字最大值
- Number.isInteger : 判断是否是整数
- Number.parseInt : 将字符串转换为整型
- Math.trunc : 向下取整 (会进行小数部分的四舍五入)
实现一下
console.log(Number.isFinite(999 ** 999)); //false
console.log(Number.isInteger(123.000000000000001));//true 15位数会自动四舍五入
console.log(Number.isInteger(123.009000000000001));//false不是整数
console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
console.log(Number.parseInt("fa232"));//NaN
console.log(Math.trunc(123123.34)); // 123123 向下取整
console.log(Math.trunc(123123.999999999999));// 123124
3,数组的扩展:
- Array.from:将伪数组对象或者可遍历的对象 转换成真数组
- Array.of:将一系列的值转换为数组
- find :找出第一个满足条件的元素
- findIndex:找出第一个满足条件元素的索引
实现一下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<button>按钮一</button>
<button>按钮二</button>
<button>按钮三</button>
<button>按钮四</button>
<button>按钮五</button>
</body>
<script>
===============================Array.from()==============================
// 真正的数组是可以用foreach方法的
let btns = document.querySelectorAll("button"); //[object NodeList]是真正的数组
btns.forEach(function(item,index){
console.log(index);
//打印成功 0 1 2 3 4
});
// 真正的数组是可以用foreach方法的
let btns1 = document.getElementsByTagName("button");// HTMLCollection(5) 不是真正的数组
btns1.forEach(function (value, index) {
console.log(index);
// 打印失败
/*
* 报错信息:Uncaught TypeError: btns1.forEach is not a function
说明使用getElementsByTagName获取的是一个伪数组,并不是真正的数组 虽然看起看很像
*/
});
// 开始使用 Array.from()
let trueBtns = Array.from(btns1)
console.log(Object.prototype.toString.call(trueBtns));// [object Array] - 已经变为真正的数组了
=================================Array.of()=======================
将一组数据转换为真数组
let arr1 = Array.of(11, 22, 333, 44, 55, 7);
console.log(arr1);// [11, 22, 333, 44, 55, 7, 7]
============================find()=====================================
let arr3 = [67, 234, 2, 45, 5, 6];
let findArr=arr3.find(function(a){
return a==67;
});
console.log(findArr); // 67 ;没有符合元素,返回undefined;
===================================findIndex()=============================
findIndex()与find()的使用方法相同,只是当条件为true时findIndex()返回的是索引值,
而find()返回的是元素。如果没有符合条件元素时findIndex()返回的是-1,而find()返回的是
undefined。findIndex()当中的回调函数也是接收三个参数,与find()相同。
代码如下:
const bookArr=[
{
id:1,
bookName:"三国演义"
},
{
id:2,
bookName:"水浒传"
},
{
id:3,
bookName:"红楼梦"
},
{
id:4,
bookName:"西游记"
}
];
var i=bookArr.findIndex((value)=>value.id==4);
console.log(i);// 3
var i2=bookArr.findIndex((value)=>value.id==100);
console.log(i2);// -1
</script>
</html>
4,对象的扩展:
- Object.is : 判断v1,v2数据是否完全相等
- Object.assign :将源对象source的属性复制到新的目标target对象上
实现一下
===========================Object.is()========================
let obj1 = { name: 'Eric', age: 18 };
let obj2 = { name: 'Eric', age: 18 };
console.log(obj1 == obj2); //false
console.log(Object.is(obj1, obj2));//false
// 因为两个对象的地址不一样所以不会相同
let str1_ = 'hello';
let str2_ = 'hello';
let result2 = Object.is(str1_, str2_);
console.log(result2);//true
=========================== Object.assign========================
将源对象的属性复制到新的目标对象上
// 此时还是一个空的对象
let newObj={};
Object.assign(newObj,obj3);
// 此时已经有所有的属性了
console.log(newObj);//{ name: 'Eric', age: 17, say: [Function: say] }