JavaScript : Expected and assignment or function call and instead saw an expression

18,701

Solution 1

Here is a simplified version that gives the same warning:

var a, b;
a && (b = a);

Expected an assignment or function call and instead saw an expression

This means that you have an expression but do not assign the result to any variable. jshint doesn't care about what the actual expression is or that there are side effects. Even though you assign something inside of the expression, you are still ignoring the result of the expression.

There is another error by jslint if you care about it:

Unexpected assignment expression

This warns you that you may want to use == instead of = inside logical expressions. It's a common error, therefore you are discouraged to use assignments in logical expressions (even though it is exactly what you want here).

Basically, jshint/jslint do not like misuse of shortcut evaluation of logical operator as replacement for if statements. It assumes that if the result of an expression is not used, it probably shouldn't be an expression.

Solution 2

http://jshint.com/docs/options/#expr - JSHINT says, Expr warnings are part of relaxing options. So, if you write /* jshint expr: true */, it won't give you the warning. But, you have to know the scope of function too. If you just type this line on top of everything, it will apply this rule globally. So, even if you made a mistake on the other lines, jshint will ignore it. So, make sure you use this wisely. Try to use if for particular function ( i mean inside one function only)

Share:
18,701
HSG
Author by

HSG

Updated on June 09, 2022

Comments

  • HSG
    HSG almost 2 years

    I am using JSHint to ensure my JavaScript is "strict" and I'm getting the following error:

    Expected an assignment or function call and instead saw an expression

    On the following code:

          var str = 'A=B|C=D'
          var data = {};
          var strArr = str.split( '|' );
          for (var i = 0; i < strArr.length; i++) {
              var a = strArr[i].split('=');
              a[1] && (data[a[0].toLowerCase()] = a[1]);  // Warning from JSHint
          } 
    

    Any ideas why I'm getting such an error or how I can code to remove the error.