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

只愿长相守 提交于 2021-02-19 06:07:40

问题


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.


回答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.




回答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)



来源:https://stackoverflow.com/questions/23183972/javascript-expected-and-assignment-or-function-call-and-instead-saw-an-express

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!