2010-06-14 27 views
46

Tôi đang cố gắng để có được mã Javascript của tôi 100% JSLint sạch sẽ.JSLint báo cáo việc sử dụng bất ngờ '&' và '|' - Tôi muốn làm sạch

Tôi có một số mã JS mà tôi đã gỡ bỏ từ nơi khác để tạo UUID. mã có dòng sau:

s[16] = hexDigits.substr((s[16] & 0x3) | 0x8, 1); 

Dòng này xúi giục JSLint để tạo ra hai thông báo lỗi:

1) Unexpected use of '&' 
2) Unexpected use of '|' 

Tôi không hiểu tại sao - Tôi đánh giá cao lời khuyên về làm thế nào để mã hóa lại để loại bỏ thông báo lỗi.

+1

Tôi đã quấn một trong những sử dụng tôi có với JSLint ý kiến ​​để vô hiệu hóa sau đó kích hoạt lại các thông điệp cụ thể: /* JSLint Bitwise: false */ .... tuyên bố đây .... /* jslint bitwise: true */ – Zhami

Trả lời

76

Lý do "tại sao" thực tế hoạt động bitwise cực kỳ hiếm hoi trong JS và các toán tử xuất hiện trong mã JS hầu như luôn là lỗi đánh máy cho các phiên bản boolean (&&, ||). Đó là lý do tại sao JSLint quan tâm. Đây là một sử dụng hợp pháp của ops bitwise mặc dù. Tôi tin rằng bạn có thể tắt các cảnh báo với bitwise cờ:

/*jslint bitwise: true */ 
+19

Tôi quấn mã "vi phạm" với: /* jslint bitwise: false */ và /* jslint bitwise: true */ hoạt động tuyệt vời. – Zhami

+3

Nó không phải là nó hiếm, đó là Crockford nghĩ rằng đó là xấu. Nó từng là, bởi vì tất cả mọi thứ trong JS được sử dụng để được chuỗi, do đó, các nhà khai thác bitwise kết thúc lên được đắt hơn. Nhưng các công cụ JS hiện đại tối ưu hóa cho chúng, vì vậy không còn như vậy nữa. – gotofritz

+1

@fritzfromlondon: Tôi nghi ngờ điều này là nhiều hơn bởi vì trong những ngày trước nút, không ai thực sự thực hiện các thao tác bit trong JS vì hầu như không có lý do chính đáng nào, và nếu nó trông giống như bạn, bạn có thể có nghĩa là . Đó là thay đổi khi mã hệ thống-y được viết trong trình duyệt, và đặc biệt là bên ngoài trình duyệt trong JS. –

3

Bạn đã chọn tùy chọn bitwise? Tùy chọn đó cảnh báo về tất cả các hoạt động của các hoạt động bitwise, vì chúng có xu hướng không hiệu quả trong Javascript (các float bản địa cần phải được chuyển đổi thành ints cho hoạt động bitwise và sau đó được chuyển đổi trở lại)

0

Nếu bạn đang sử dụng this javascript lint công cụ mà bạn có thể chỉ định một tập tin cấu hình trên dòng lệnh mà quy định cụ thể mà kiểm tra để bật/tắt.

Ví dụ, tôi thường gọi tôi như sau:

jsl -conf jsl.conf 

với một tập tin jsl.conf trông giống như

#---------------------------------------------------------------------------- 
# 
# This is a slightly edited version of the jsl.default.conf file that comes 
# with the install package for JavaScript Lint. 
# 
#---------------------------------------------------------------------------- 

# 
# Configuration File for JavaScript Lint 0.3.0 
# Developed by Matthias Miller (http://www.JavaScriptLint.com) 
# 
# This configuration file can be used to lint a collection of scripts, or to 
# enable or disable warnings for scripts that are linted via the command line. 
# 

### Warnings 
# Enable or disable warnings based on requirements. 
# Use "+WarningName" to display or "-WarningName" to suppress. 
# 
-no_return_value    # function {0} does not always return a value 
+duplicate_formal    # duplicate formal argument {0} 
-equal_as_assign    # test for equality (==) mistyped as assignment (=)?{0} 
+var_hides_arg    # variable {0} hides argument 
-redeclared_var    # redeclaration of {0} {1} 
-anon_no_return_value   # anonymous function does not always return a value 
+missing_semicolon   # missing semicolon 
+meaningless_block   # meaningless block; curly braces have no impact 
+comma_separated_stmts  # multiple statements separated by commas (use semicolons?) 
+unreachable_code    # unreachable code 
-missing_break    # missing break statement 
-missing_break_for_last_case # missing break statement for last case in switch 
-comparison_type_conv   # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==) 
-inc_dec_within_stmt   # increment (++) and decrement (--) operators used as part of greater statement 
+useless_void     # use of the void type may be unnecessary (void is always undefined) 
+multiple_plus_minus   # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs 
+use_of_label     # use of label 
-block_without_braces   # block statement without curly braces 
-leading_decimal_point  # leading decimal point may indicate a number or an object member 
+trailing_decimal_point  # trailing decimal point may indicate a number or an object member 
-octal_number     # leading zeros make an octal number 
+nested_comment    # nested comment 
-misplaced_regex    # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma 
-ambiguous_newline   # unexpected end of line; it is ambiguous whether these lines are part of the same statement 
-empty_statement    # empty statement or extra semicolon 
-missing_option_explicit  # the "option explicit" control comment is missing 
+partial_option_explicit  # the "option explicit" control comment, if used, must be in the first script tag 
+dup_option_explicit   # duplicate "option explicit" control comment 
+useless_assign    # useless assignment 
-ambiguous_nested_stmt  # block statements containing block statements should use curly braces to resolve ambiguity 
+ambiguous_else_stmt   # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent) 
-missing_default_case   # missing default case in switch statement 
+duplicate_case_in_switch  # duplicate case in switch statements 
+default_not_at_end   # the default case is not at the end of the switch statement 
+legacy_cc_not_understood  # couldn't understand control comment using /*@[email protected]*/ syntax 
+jsl_cc_not_understood  # couldn't understand control comment using /*jsl:keyword*/ syntax 
+useless_comparison   # useless comparison; comparing identical expressions 
+with_statement    # with statement hides undeclared variables; use temporary variable instead 
+trailing_comma_in_array  # extra comma is not recommended in array initializers 
+assign_to_function_call  # assignment to a function call 
-parseint_missing_radix  # parseInt missing radix parameter 


### Output format 
# Customize the format of the error message. 
# __FILE__ indicates current file path 
# __FILENAME__ indicates current file name 
# __LINE__ indicates current line 
# __ERROR__ indicates error message 
# 
# Visual Studio syntax (default): 
+output-format __FILE__(__LINE__): __ERROR__ 
# Alternative syntax: 
#+output-format __FILE__:__LINE__: __ERROR__ 


### Context 
# Show the in-line position of the error. 
# Use "+context" to display or "-context" to suppress. 
# 
+context 


### Semicolons 
# By default, assignments of an anonymous function to a variable or 
# property (such as a function prototype) must be followed by a semicolon. 
# 
+lambda_assign_requires_semicolon 


### Control Comments 
# Both JavaScript Lint and the JScript interpreter confuse each other with the syntax for 
# the /*@[email protected]*/ control comments and JScript conditional comments. (The latter is 
# enabled in JScript with @[email protected]). The /*jsl:keyword*/ syntax is preferred for this reason, 
# although legacy control comments are enabled by default for backward compatibility. 
# 
#+legacy_control_comments 


### JScript Function Extensions 
# JScript allows member functions to be defined like this: 
#  function MyObj() { /*constructor*/ } 
#  function MyObj.prototype.go() { /*member function*/ } 
# 
# It also allows events to be attached like this: 
#  function window::onload() { /*init page*/ } 
# 
# This is a Microsoft-only JavaScript extension. Enable this setting to allow them. 
# 
-jscript_function_extensions 


### Defining identifiers 
# By default, "option explicit" is enabled on a per-file basis. 
# To enable this for all files, use "+always_use_option_explicit" 
-always_use_option_explicit 

# Define certain identifiers of which the lint is not aware. 
# (Use this in conjunction with the "undeclared identifier" warning.) 
# 
# Common uses for webpages might be: 
#+define window 
#+define document 


### Interactive 
# Prompt for a keystroke before exiting. 
#+pauseatend 


### Files 
# Specify which files to lint 
# Use "+recurse" to enable recursion (disabled by default). 
# To add a set of files, use "+process FileName", "+process Folder\Path\*.js", 
# or "+process Folder\Path\*.htm". 
# 

T.B. này Kiểm tra my javascript UUID page, nhân tiện, vượt qua tất cả các kiểm tra JSLint ở trên. :-)

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