簡體   English   中英

布爾變量的行為很奇怪

[英]boolean variable is acting weird

首先是代碼:

function searchItems(){
var noParameters = new Boolean(0);
var formFields = $('form')[0].elements;
for(i=0;1<formFields.length;i++){
    if(formFields[i].type == 'text'){
        if(!(formFields[i].value)){
            noParameters = 0;
        }
    }
}
alert(noParameters.valueOf());
}

在表單提交上調用此函數。 目的是查看“文本”類型的所有表單字段是否都沒有值(空輸入框)。

我認為應該的時候沒有收到警報。 布爾變量在聲明時會初始化,因此其中有一個值。 如果所有的if語句都能正常工作,我已經反復檢查過。 我在瀏覽器中遇到的唯一錯誤是“類型為null或不是對象”,該錯誤將表單字段類型與“文本”進行比較。

我為警報嘗試了不同的語法,但均未成功:noParameters.toString(),將noParameters.valueOf()分配給變量,然后警告為“ true”和“ false”,而不是0和1。為什么我的警報沒有節目?

您有一個無限循環,因為條件1 < formFields.length始終為true。 但是, i每次都會增加,直到formFields[i]計算為null並得到異常,因為您無法訪問非對象的type屬性。


給你的問題: new Boolean(0); 為值false創建一個絕對不必要的Object包裝器。 不要使用它。 在循環內部,最終將0分配給變量。 JavaScript是弱類型的,因此在語法上是有效的,但仍然很奇怪。

然后,在警報中使用.valueOf()方法。 對於數字0這將起作用,因為它被隱式轉換為Number實例,但也不常見。 如果僅使用布爾值,則不需要它。

您在循環中犯了一個錯誤:您說“ while” 1

你可能是說

for(i=0;i<formFields.length;i++){

其他人已經指出,您在1<formFields.length中有一個數字為1的錯字,其中應該像i<formFields.length那樣包含變量i 但是,如果您的目的是:

“以查看是否所有類型為'text'的表單字段都沒有值(空輸入框)。”

然后,我會整理一下您的函數,如下所示:

function searchItems(){
   var noParameters = true,
       formFields = $('form')[0].elements;
   for(i=0;i<formFields.length;i++){
      if(formFields[i].type == 'text' && formFields[i].value != ""){
         noParameters = false;
         break;
      }
   }
   alert(noParameters);
}

也就是說,一旦找到任何非空白的文本字段,請將noParameters設置為false並退出循環。 正如我在上面的評論中提到的那樣,只需使用原始值truefalse ,而不要使用new Boolean() 請注意,您不需要嵌套的if語句: &&運算符使用短路評估,因此只有在左側條件為true時,它才會測試右側條件。

或者,由於您的問題被標記為“ jquery”,因此以下語句更短(但在運行時效率較低):

function searchItems() {
   var noParameters = $('form input[type="text"]').filter(function(){
                         return this.value != "";
                      }).length === 0;

   alert(noParameters);
}

也就是說,如果具有非空白值的文本類型的輸入集的長度為0,則您沒有設置任何參數...

無論哪種方式,在測試.value您都可能希望修剪任何空格,以使用戶只能輸入空格而無法欺騙您的代碼:

if(formFields[i].type == 'text' && formFields[i].value.replace(/\s/g,"") != "")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM