前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Array对象的方法实现(5)----Array.prototype.includes(实现常规参数的功能)

Array对象的方法实现(5)----Array.prototype.includes(实现常规参数的功能)

作者头像
Rattenking
发布2021-01-29 16:01:03
发布2021-01-29 16:01:03
67000
代码可运行
举报
文章被收录于专栏:RattenkingRattenking
运行总次数:0
代码可运行

10,Array的includes方法

includes() 方法用来判断一个数组是否包含一个指定的值,如果是,酌情返回 true或 false。 语法:arr.includes(searchElement) 或 arr.includes(searchElement, fromIndex) 注意:1,返回值为true(找到指定值),false(未找到指定值)。2,不改变原数组

代码语言:javascript
代码运行次数:0
运行
复制
Array.prototype._includes = function(searchElement,fromIndex){
	if (this === null) {
        throw new TypeError('"this" is null or not defined');
    }
	let that = Object(this),len = that.length >>> 0,param = arguments,index = fromIndex | 0;
	
	if(len === 0){return false;}
	
	startIndex = Math.max(index >= 0 ? index : len - Math.abs(index), 0);
	
	while(startIndex < len){
		if(String(that[startIndex]) === String(param[0]))return true;
		startIndex++
	}
	return false;
}

注意:

(1,通过startIndex获取开始查找的位置,如果开始位置大于length,返回false

(2,将that[startIndex]和param[0]转化为字符串比较的原因是我发现官方给的

代码语言:javascript
代码运行次数:0
运行
复制
console.log([1, 2, NaN].includes(NaN)); // true

我们都知道NaN === NaN会返回false,也就是说如果我们直接进行比较,会发现[1, 2, NaN]._includes(NaN)返回的是false,所以我在此处做了一个字符串转换处理。

测试:

代码语言:javascript
代码运行次数:0
运行
复制
var arr = ['a', 'b', 'c'];

console.log(arr.includes('a', -100)); // true
console.log(arr.includes('b', -100)); // true
console.log(arr.includes('c', -100)); // true

console.log(arr._includes('a', -100)); // true
console.log(arr._includes('b', -100)); // true
console.log(arr._includes('c', -100)); // true

console.log(arr.includes('c', 3));   //false
console.log(arr.includes('c', 100)); // false

console.log(arr._includes('c', 3));   //false
console.log(arr._includes('c', 100)); // false

console.log('_includes:'+[1, 2, 3]._includes(2));     // true
console.log([1, 2, 3]._includes(4));     // false
console.log([1, 2, 3]._includes(3, 3));  // false
console.log([1, 2, 3]._includes(3, -1)); // true
console.log('_includes:'+[1, 2, NaN]._includes(NaN)); // true
console.log('_includes:'+[1, 2, +0]._includes(-0));//true
console.log('_includes:'+[1, 2, -0]._includes(+0));//true

这样修改后示例测试基本都是对的,请问大神这个位置的NaN进行比较时,返回的是true,浏览器是怎么处理这个问题?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/08/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档