Board logo

主題: [javascript] [問題]跳出迴圈 [打印本頁]

發表人: 335012    時間: 2016-8-1 01:14 AM     主題: [問題]跳出迴圈

各位驢友,大家好
有些問題想請教一下眾驢友。
小弟目前以JavaScript寫了一小段程式碼
用來對發票號碼,供自己爽...

CODE:
[Copy to clipboard]
var myArray = ["12345678", "87654321", "78965432"]; //儲存發票號碼

var checkArray = function ( num ) {
    var len = myArray.length,
        i = 0,
        result = [],
        bl = "Bad Luck",  //沒中獎..
        last3;  //檢查末三碼
    for ( ; i<len; i+=1 ) {
        last3 = myArray[i].slice(5, 8);
        if( last3 === num ) {
            result.push( myArray[i] + ":" + i );
        }
        if( typeof num !== 'string' ) { //以字串處理,怕有0開頭之數字
            return "請加引號";
        }
        if( last3 !== num ) {
            result.push(bl);
        }
     }

     return result;
};
https://jsfiddle.net/cyz9Lyfv/3/

我的問題是當參數num在陣列裡的元素找不到相同的末三碼時
該如何跳出迴圈,只傳回一次變數bl就好
因為假設有一百張發票都沒中(很正常)在主控台就還好
在網頁裡使用alert或是document.writln就很煩了.....
我有嘗試過break,程式運行就會卡彈....
不知小弟描述的是否清楚

不知眾驢友,有何想法
懇請多多指教,用力鞭打
發表人: leacks    時間: 2016-8-1 06:29 PM

我沒有學js
不過一般不是 if( last3 == num ) {嗎? 為啥你有3個等於??
我找了
http://www.w3school.com.cn/tiy/t.asp?f=js_ifthen
try一下是兩個阿


你的程式思維有問題
應該多一個變數或你愛用bl也可以

if( last3 == num ) {
            bl='中獎'
            result.push( myArray + ":" + i );
        }

for外面
if( bl!='中獎' ) {
           result.push('沒中');
        }
發表人: 335012    時間: 2016-8-1 11:27 PM

節錄自: JavaScript 設計模式 P.22

引用:
避免隱含的型別轉換
JavaScript在比較變數時會隱含的做型別轉換。這就是為什麼 false == 0 或 " " == 0
會回傳 true 的原因。

為了避免隱含的型別轉換造成困惑,應總是用 === 和 !== 運算子來比較,可以同時比較
運算式結果的型別跟值:

var zero = 0;
if (zero === false) {
    //不會執行,因為 zero 是 0,不是 false
}

if (zero == false) {
    //這個區塊會執行...
}
另一個思想流派認為如果 == 能滿足需求,使用 === 則顯得累贅。例如當你使用 typeof
你知道會回傳一個字串,所以沒有理由去使用嚴格比對。儘管如此,JSLint要求使用嚴格比較
;這樣確實讓程式碼更一致,並在閱讀程式碼的時候可以少花一點精神。


所以小弟認為,見仁見智..
另外,要把 if 敘述提到 for 外面的話..
是否就不需使用 if 敘述了?
直接 return "沒中"; 或是 alert("沒中"); 會比較好?

謝謝提出想法。
發表人: leacks    時間: 2016-8-16 07:57 PM


引用:
335012寫到:
節錄自: JavaScript 設計模式 P.22

引用:
避免隱含的型別轉換
JavaScript在比較變數時會隱含的做型別轉換。這就是為什麼 false == 0 或 " " == 0
會回傳 true 的原因。

為了避免隱含的型別轉換造成困惑,應總是用 === 和 !== 運算子來比較,可以同時比較
運算式結果的型別跟值:

var zero = 0;
if (zero === false) {
    //不會執行,因為 zero 是 0,不是 false
}

if (zero == false) {
    //這個區塊會執行...
}
另一個思想流派認為如果 == 能滿足需求,使用 === 則顯得累贅。例如當你使用 typeof
你知道會回傳一個字串,所以沒有理由去使用嚴格比對。儘管如此,JSLint要求使用嚴格比較
;這樣確實讓程式碼更一致,並在閱讀程式碼的時候可以少花一點精神。


所以小弟認為,見仁見智..
另外,要把 if 敘述提到 for 外面的話..
是否就不需使用 if 敘述了?
直接 return "沒中"; 或是 alert("沒中"); 會比較好?

謝謝提出想法。



感謝解說
因為我之前寫c之類,甚至印象連php都沒有三個等於
尤其是c,不同型別,除非是null之類,不然根本不讓你比
發表人: Ailio    時間: 2016-8-17 01:24 PM

php有 === 喔

因為php隱含轉型 null 0 false 用 == 判斷會視為一樣

如果遇到某些要判斷回傳值 是 0 但不是 null 時 就必須使用 ===




歡迎光臨 TWed2k (http://twed2k.org/) Powered by Discuz! 4.1.0