国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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
主站蜘蛛池模板: 久久最新 | 国产精品第一国产精品 | 国产精品爱久久久久久久 | 韩日毛片| 久久99精品国产麻豆婷婷洗澡 | 超碰97国产精品人人cao | 自拍偷拍 欧美日韩 | 九九热在线视频观看这里只有精品 | 国产欧美专区 | 成人免费黄色大片 | 日本国产在线 | 国产日韩精品视频 | 国产香蕉视频在线播放 | 国产精品高清一区二区 | 一区视频在线 | 中文字幕视频在线 | 美日韩成人 | 色综合天天天天做夜夜夜夜做 | 91欧美激情一区二区三区成人 | 亚洲免费视频在线 | 五月激情综合网 | 美色阁av| 精品日韩一区二区三区 | 国产在线观看二区 | 成人精品视频一区二区三区 | 国产精品国产三级国产aⅴ 成人在线免费看 | 日本三级视频 | 久草福利资源 | 日韩免费av一区二区 | 国产伦精品一区二区三区精品视频 | 精品国产黄a∨片高清在线 黄色大片aaaa | 91午夜理伦私人影院 | www一区二区| 午夜精品久久久久久久男人的天堂 | 91精品麻豆日日躁夜夜躁 | 起碰在线视频 | 亚洲视频1 | 午夜高清视频 | 亚洲精品乱码久久久久久蜜桃91 | 亚洲电影在线观看 | 国产日韩欧美 |