一道有趣的JS题(1 - 妙用隐式类型转换)

版权声明:本文为博主原创文章,评论区告知一声,大家随意转载! https://blog.csdn.net/MessageBox_/article/details/82975141

题目

输入:var a = [1,[2,3],a,[b,c]];
输出:1,2,3,a,b,c

解决方法3种

1. 使用递归
function flat1(arr){
	let res = [];
	if(  Array.isArray(arr) ){
		arr.forEach((val)=>{
			if( Array.isArray(val) ){
				res.concat( flat1(val) );
			}else{
				res.push(val);
			}
		});
	}
	return res.join(',');
}
2. 使用toString
function flat2(item){
	if(Array.isArray(item)){
		item.toString = function(){
				return  this.join(',');
		}
	}
	return item + '';
}

3. 使用valueOf

function flat3(item){
	if(Array.isArray(item)){
		item.valueOf= function(){
				return  this.join(',');
		}
	}
	return item + '';
}

小结

方法2和方法3都是利用了数组的隐式类型转换。也就是在进行item + ''时,会先调用item的valueOf方法,如果valueOf返回的不是基本类型,就会调用toString方法。

猜你喜欢

转载自blog.csdn.net/MessageBox_/article/details/82975141