2013-08-29 52 views
1

我有以下代碼片段似乎是正確的,但jslint不喜歡它。jslint給予預期的字符串,而不是看到{a}

var VALID_TYPE = { 
    "stringType" : "string", 
    "arrayType" : "array", 
    "objectType" : "object" 
}, 
    DEFAULT_FIRST = 1, DEFAULT_LAST = 1, PRIMITIVE_TYPE = { 
    "stringType" : "string", 
    "arrayType" : "array", 
    "objectType" : "object", 
    "undefinedType" : "undefined", 
    "booleanType" : "boolean", 
    "numberType" : "number" 
}; 
VALID_TYPE.toString = function() { 
    var types = [], currentType; 
    for (currentType in this) { 
     if (typeof this[currentType] === PRIMITIVE_TYPE.stringType) { 
      types.push(this[currentType]); 
     } 
    } 
    var outputString = types.join(', '); 
    return outputString; 
}; 

錯誤路線是這樣的,在所述 「」: 如果(typeof運算此[currentType] === PRIMITIVE_TYPE.stringType){

錯誤的確切文本是: 預期一字符串,而是看到'。'。

toString()按預期執行。除了將表達式的右側放入另一個變量之外,我無法看到應該更改以避免錯誤。該錯誤尚未在jslinterrors.com上描述。

+1

它看起來像JSLint不喜歡它,當你比較'typeof'到一個非常量。不知道爲什麼... – SLaks

回答

0

由於@SLaks在註釋中聲明,JSLint會在遇到比較運算符時發出警告,其中一個操作數是typeof表達式,另一個操作數不是字符串文字。

下面的代碼的削減版本,執行此檢查:

function relation(s, eqeq) { 
    var x = infix(s, 100, function (left, that) { 
     // ... 
     if (are_similar(left, right) || 
       ((left.id === '(string)' || left.id === '(number)') && 
       (right.id === '(string)' || right.id === '(number)'))) { 
      that.warn('weird_relation'); 
     } else if (left.id === 'typeof') { 
      if (right.id !== '(string)') { 
       right.warn("expected_string_a", artifact(right)); 
      } else if (right.string === 'undefined' || right.string === 'null') { 
       left.warn("unexpected_typeof_a", right.string); 
      } 
     } else if (right.id === 'typeof') { 
      if (left.id !== '(string)') { 
       left.warn("expected_string_a", artifact(left)); 
      } else if (left.string === 'undefined' || left.string === 'null') { 
       right.warn("unexpected_typeof_a", left.string); 
      } 
     } 
     // ... 
    }); 
    // ... 
} 

特定發出警告的唯一其他時間就是當JSLint的遇到一個不帶引號的JSON屬性:

{ 
    a: 1 
} 

我一旦我有機會,我會立即通知http://jslinterrors.com

0

toString()按預期執行。

該代碼是完全有效的,所以是的,它會這樣做。

請記住,jsLint並不尋找錯誤;它正在尋找它認爲不好的做法。

但是這些事情並不總是在每一種情況下都是絕對錯誤的;通常有一個合法的用例,如果你有其中一種情況,那麼你仍然會得到這個錯誤,但是必須忽略它。

Lint錯誤應視爲指導,而不是嚴格遵守並導致構建失敗的內容。

您可能還想考慮使用jsHint而不是jsLint。 jsHint基於jsLint,但往往會更加務實一些。

希望有所幫助。

相關問題