2012-03-02 22 views
31

Tôi hoàn toàn tuyệt với lỗi này JSLint. Làm thế nào tôi có thể chịu đựng được nó? Có một lá cờ hoặc hộp kiểm cho nó?Mong đợi một cuộc gọi hàm hoặc chuyển nhượng và thay vào đó thấy một biểu thức

Bạn nhận được nó khi bạn làm công cụ như:

v && arr.push(v); 

như trái ngược với:

if (v) { 
    arr.push(v); 
} 

Cả hai làm điều tương tự. Nếu bạn đặt:

window.test = function(v) { 
    'use strict'; 
    var arr = []; 
    if (v) { 
     arr.push(v); 
    } 
    return arr; 
}; 

vào minifier nó minifies xuống này anyway:

window.test=function(a){var b=[];a&&b.push(a);return b}; 

Trả lời

73

Tôi không nghĩ JSLint có một tùy chọn để biến điều đó đi. Tuy nhiên,

JSHint (một ngã ba có nhiều tùy chọn hơn) có tùy chọn: Tùy chọn expr, được ghi là "nếu ExpressionStatement được cho phép dưới dạng Chương trình".

+0

+1 Cảm ơn trang web :) – diEcho

+0

@diEcho: Bạn cũng có thể tải xuống và sử dụng nó cục bộ (đó là những gì tôi làm). Tôi chạy nó thông qua NodeJS với các tùy chọn ưa thích của tôi, * đáng kể * giúp tôi tự tin vào đúng mã. :-) –

+8

http://www.jshint.com/docs/options/#expr để tiết kiệm thời gian của ai đó trong tương lai –

9

Không có tùy chọn cho điều này trong JSLint. Bạn có thể phá vỡ nó bằng cách sử:

var dummy = v && arr.push(v); 

NB: dummy đánh giá để true sau đó.

workaround Một có thể là:

function expression(statement) { 
'use strict'; 
return statement; 
} 
expression(v && arr.push); 
+6

Nó sẽ hoạt động nhưng nó ngớ ngẩn. Minifier sẽ thực sự sắp xếp nó ra và nhưng để dễ đọc thì tốt hơn là chỉ sử dụng câu lệnh 'if' hơn IMO đó. – ryanve

+0

Đúng vậy. Nhưng bạn đã yêu cầu một cách để chịu đựng được. Đã thêm một cách giải quyết khác. Nó giống như Crockford nói ở đâu đó: * jsLint được thiết kế để là một nỗi đau trong ass cho các lập trình viên *; ~) – KooiInc

+0

VIẾT tuyệt vời && hack không hoạt động trong jsLint ... có thể phụ thuộc vào phiên bản ... – faeb187

30

Bạn có thể thêm dòng sau vào bỏ qua cảnh báo rằng:

/* jshint -W030 */

Bạn có thể đọc thêm về nó here.

+3

Câu trả lời là hoàn toàn không liên quan cho câu hỏi, đó là về JSLint, chứ không phải JSHint. –

+13

Tuy nhiên, câu trả lời vẫn là câu trả lời hữu ích nhất cho đa số người dân ở đây. –

+2

"hoàn toàn không liên quan"? Vì JSHint hoàn toàn không liên quan đến JSLint? – iconoclast

Các vấn đề liên quan