一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - JS數組索引檢測中的數據類型問題詳解

JS數組索引檢測中的數據類型問題詳解

2021-12-29 16:21行舟客 js教程

這篇文章主要給大家介紹了關于JS數組索引檢測中的數據類型問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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

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

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

(:項目中存取元素是動態的!

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

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

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

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

JS數組索引檢測中的數據類型問題詳解

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

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

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

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

這個操作用JS可以這樣實現:

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

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

JS數組索引檢測中的數據類型問題詳解

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是什么類型都要執行這段代碼
			return Reflect.set(trapTarget,key,value);
		}
	});
}

實驗一下:

JS數組索引檢測中的數據類型問題詳解

總結

到此這篇關于JS數組索引檢測中的數據類型問題詳解的文章就介紹到這了,更多相關JS數組索引檢測的數據類型內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/qq_43624878/article/details/112388692

延伸 · 閱讀

精彩推薦
  • js教程JavaScript 防盜鏈的原理以及破解方法

    JavaScript 防盜鏈的原理以及破解方法

    這篇文章主要介紹了JavaScript 防盜鏈的原理以及破解方法,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下...

    LuckyChou10252021-12-22
  • js教程JS數組索引檢測中的數據類型問題詳解

    JS數組索引檢測中的數據類型問題詳解

    這篇文章主要給大家介紹了關于JS數組索引檢測中的數據類型問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考...

    行舟客11782021-12-29
  • js教程JS實現公告上線滾動效果

    JS實現公告上線滾動效果

    這篇文章主要為大家詳細介紹了JS實現公告上線滾動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Jeslie-He4032021-12-29
  • js教程微信小程序自定義modal彈窗組件的方法詳解

    微信小程序自定義modal彈窗組件的方法詳解

    這篇文章主要給大家介紹了關于微信小程序自定義modal彈窗組件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學...

    遇見小美好12042021-12-15
  • js教程微信小程序自定義支持圖片的彈窗

    微信小程序自定義支持圖片的彈窗

    這篇文章主要為大家詳細介紹了微信小程序自定義支持圖片的彈窗,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    歲末Zzz8172021-12-15
  • js教程JavaScript實現滑塊驗證解鎖

    JavaScript實現滑塊驗證解鎖

    這篇文章主要為大家詳細介紹了JavaScript實現滑塊驗證解鎖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    努力的黑皮4602021-12-27
  • js教程js閉包的9個使用場景

    js閉包的9個使用場景

    這篇文章主要介紹了js 閉包的9個使用場景,幫助大家更好的理解和學習JavaScript 閉包的使用,感興趣的朋友可以了解下...

    林恒10072021-12-22
  • js教程微信小程序實現可拖動懸浮圖標(包括按鈕角標的實現)

    微信小程序實現可拖動懸浮圖標(包括按鈕角標的實現)

    這篇文章主要介紹了微信小程序實現可拖動懸浮圖標(包括按鈕角標的實現),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考...

    юноша7152021-12-21
主站蜘蛛池模板: 亚洲 欧美 制服 校园 动漫 | 欧美理论片手机在线观看片免费 | 亚洲 欧美 制服 校园 动漫 | 沟厕okn系列在线播放 | 91在线老王精品免费播放 | 69罗莉视频在线观看 | 欧式午夜理伦三级在线观看 | 男生和女生艹逼 | 果冻传媒在线视频观看免费 | 日韩成人免费aa在线看 | 高清视频一区二区三区 | 亚洲AV久久无码精品九号 | 日韩理论片在线看免费观看 | 日本三级欧美三级人妇英文 | 日本亚洲娇小与黑人tube | 久久亚洲电影www电影网 | 奇米影视777最新在线 | 久久成人国产精品一区二区 | 天海翼三级 | 国产精品一久久香蕉产线看 | 色悠久久久久综合欧美99 | 国产精品原创巨作无遮挡 | 国产成人影院在线观看 | 九九99香蕉在线视频免费 | 岛国免费大片 | 三级理论在线播放大全 | 无颜之月5集全免费看无删除 | 国产99视频精品免视看9 | 法国贵妇一级伦理hd | 久久夜色噜噜噜亚洲AV0000 | 暖暖视频免费观看视频中国.韩剧 | 日本最新伦中文字幕 | 9 1 视频在线| 久久久久久88色偷偷 | 国产精品1 | 日韩 国产 欧美 精品 在线 | 青青国产成人久久激情91麻豆 | 97久久精品午夜一区二区 | 精品视频在线免费 | 日本又黄又裸一级大黄裸片 | 奇米影视在线视频8888 |