請高手指點!
<!DOCTYPE HTML>
<html>
<head>
? ? <meta http-equiv="Content-Type" content="text/html; charset=gb18030">
? ? <title>Untitled Document</title>
? ??
</head>
<body>
? ? <script type="text/javascript"> ??
? ? ? ? /*
? ? ? ? ?* param1 Array?
? ? ? ? ?* param2 Array
? ? ? ? ?* return true or false
? ? ? ? ?*/
? ? ? ? function arraysSimilar(arr1, arr2){
? ? ? ? ? ? if(!(arr1 instanceof Array)||!(arr2 instanceof Array)){return "判定結果:不通過";}
? ? ? ? ? ? if(arr1.length!=arr2.length){return "判定結果:不通過"; }
? ? ? ? ? ? var count=0;
? ? ? ? ? ?for(var i in arr1){
? ? ? ? ? ? ? ?for(var j in arr2){
? ? ? ? ? ? ? ? ? ?if(typeof arr1[i] ==typeof arr2[j]){count++;} ? ? ? ? ?
? ? ? ? ? ? ? ?}
? ? ? ? ? ?}
? ? ? ? ? ?if(count==arr1.length){return "判定結果:通過";}else{return "判定結果:不通過"}
? ? ? ? }
?
? ? ? ? document.write(arraysSimilar([1,true,null],[null,false,100]));
? ? </script>
? ? <script src="testData.js"></script>
</body>
</html>
我的篇幅比課件答案簡短很多,是否代表我的代碼功能不如課件答案的功能完善呢?我有哪些方面的bug呢?謝謝。
2016-05-14
你這bug有點小多,推薦你去看下同學代碼第一和第二的,1. ?typeof 這是不對的,typeof 只能判斷基本類型,但是你的數組中可能會有引用類型,而且 typeof null也會返回Object ,所以你要先封裝一個判斷類型的函數,可用Object.prototype.toString.call()的方法,(在IE6/7/8下遇到null和undefined會失效,返回Object). 2. ? 你用的 instanceof 在頁面存在框架時,無法進行準確的判斷,所以最好?數組的判斷用Array.isArray(),?3. ?for in 對數組進行循環時,順序是不固定的,你的?? ?if(typeof arr1[i] ==typeof arr2[j]) ?幾乎不會進行這個if 條件內的語句,你需要先用sort()方法,對數組進行排序,然后再進行比較 4. ?你的count == arr1.length 貌似是多余的吧