1. 程式人生 > >一道有趣的JS題(1 - 妙用隱式型別轉換)

一道有趣的JS題(1 - 妙用隱式型別轉換)

題目

輸入: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方法。