2013-08-29 25 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,但往往会更加务实一些。

希望有所帮助。

相关问题