我得到一个"错误"在这一行:
var test = selector instanceof Priv.Constructor;
错误是:
`Unexpected 'instanceof'.`
我设置了最小标志:
/*jslint
browser
this
*/
/*global
window
*/
并且可以在这里找到任何原因:
我不想压制警告,我想知道为什么会这样。
答案 0 :(得分:3)
看起来答案是JSLint认为instanceof
会产生意外/意外结果。
var simpleStr = 'This is a simple string';
simpleStr instanceof String; // *returns false*, checks the prototype chain, finds undefined
那是出乎意料的!您必须使用String
进行初始化才能获得预期结果。
var myString = new String();
var newStr = new String('String created with constructor');
myString instanceof String; // returns true
newStr instanceof String; // returns true
我相信"对" JSLint的答案是尝试Object.prototype.toString.call
所描述的here技巧,如下所示:
"[object String]" === Object.prototype.toString.call("adsfsad");
"[object String]" === Object.prototype.toString.call(myString);
"[object String]" === Object.prototype.toString.call(newStr);
一切都是真的。
Crockford之前说过,JSLint应该可以帮助你防止使用看起来像错误的习惯用语或者产生意想不到的结果的代码。这就是在这里发生的事情,牺牲了some performance。虽然记得not to fret with micro-optimizations!
答案 1 :(得分:1)
在jslint.conf
文件中,将“expr”选项设置为true
以取消该警告:
{
"evil":false,
"indent":2,
"vars":true,
"passfail":false,
"plusplus":false,
"predef": "module,require",
"expr" : true
}
//更新问题
据我所知,这是因为你将它作为一个分配线使用。虽然我的JSLint本地副本没有为它抛出那个错误,但我可以想象它就像一个悬空的表达式赋值。尝试将表达式包装在括号中以确保JSLint不认为它是悬空的,例如
var test = (selector instanceof Priv.Constructor);
看看是否能解决问题。如果没有,请查看是否通过独立检查获得错误,例如:
if(selector instanceof Priv.Constructor){ console.log('it is an instance');}
最后,它可能是您的代码中较早出现的内容,而且它只是在它到达instanceof
之前没有得到应该关闭之前语句的东西,在这种情况下“错误的“错误是从你的角度抛出的。