亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JS數(shù)組索引檢測中的數(shù)據(jù)類型問題詳解

 更新時間:2021年01月11日 10:00:24   作者:行舟客  
這篇文章主要給大家介紹了關于JS數(shù)組索引檢測中的數(shù)據(jù)類型問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

之前在寫微信小程序項目時,里面有一個“城市選擇”的功能,筆者用的是 <picker-view> 組件,這個組件比較特別,因為它的 value 屬性規(guī)定是 數(shù)組 格式的。比如: value="[1]"。

因為當時對JS變量類型轉換的不了解,筆者在代碼中寫下了這樣的幾行判斷:(這是嚴謹?shù)模?/p>

let val_one=typeof this.data.pIndex=="number"?[this.daya.pIndex]:this.data.pIndex

(:項目中存取元素是動態(tài)的!

上面這是因為要使下標動態(tài)跟隨用戶選擇,并反饋到wxml里的 value 屬性上展示。

但是在這之前還需要做一層判斷 —— 因為有的地區(qū)是省級市或者直轄市,而且要防止用戶“騷操作”,比如一直上拉或者猛的拉出去,這時候再微信小程序中是會報錯找不到對應數(shù)據(jù)的:

let length=placeArray[val_one].sub.length
if(val[0]>=length){
 val=[length-1]
}else if(val[0]<0){
 val=[0]
}

之后我再回過頭優(yōu)化這個項目代碼時發(fā)現(xiàn)這里(強制使用時將數(shù)組轉為數(shù)字,反饋時將數(shù)字轉為數(shù)組)其實大可不必:

detail

JavaScript似乎對數(shù)據(jù)有自己“獨特”的處理方式,但是目前筆者還沒找到相關資料~~

如何判斷一個值能不能作為數(shù)組下標(索引)

但是可以肯定的是:為整數(shù)屬性鍵賦值是數(shù)組才有的特例,因為它們與非整數(shù)鍵的處理方式不同。要判斷一個屬性是否能作為數(shù)組的索引,筆者找到了ES6規(guī)范文檔中的一段話:

當前僅當 ToString(ToUint32(P)) 等于P,并且 ToUint32(P) 不等于 2^32-1 時,字符串屬性名稱P才是一個數(shù)組索引。

這個操作用JS可以這樣實現(xiàn):

function toUint32(value){
	return Math.floor(Math.abs(Number(value))) % Math.pow(2,32);
}
function isArrayIndex(key){
	let numericKey=toUint32(key);
	return String(numericKey) == key && numericKey < (Math.pow(2,32)-1);
}

toUint32() 函數(shù)通過規(guī)范中描述的算法將給定的值轉換為無符號32位整數(shù);isArrayIndex() 函數(shù)中先將鍵轉換為uint32結構,然后進行兩次比較(toString()后等不等于原數(shù)并且是否小于 2^32-1

有了這個基礎,我們就可以基于此去簡單模仿一下 new Array() 的行為 —— 其中最重要的還是關于length的描述:

array_length

function createArray(length=0){
	return new Proxy({ length },{
		set(trapTarget,key,value){
			let currentLength=Reflect.get(trapTarget,"length");
			if(isArrayIndex(key)){
				let numericKey=Number(key);
				if(numericKey >= currentLength){
					Reflect.set(trapTarget,"length",numericKey+1);
				}
			}else if(key === "length"){
				if(value < currentLength){
					for(let index=currentLength-1;index >= value;index--){
						Reflect.deleteProperty(trapTarget,index);
					}
				}
			}
			// 無論key是什么類型都要執(zhí)行這段代碼
			return Reflect.set(trapTarget,key,value);
		}
	});
}

實驗一下:

myArray_test

總結

到此這篇關于JS數(shù)組索引檢測中的數(shù)據(jù)類型問題詳解的文章就介紹到這了,更多相關JS數(shù)組索引檢測的數(shù)據(jù)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論