Javascript 如何使用jslint和instanceof?
我在这一行收到一个“错误”:Javascript 如何使用jslint和instanceof?,javascript,jslint,Javascript,Jslint,我在这一行收到一个“错误”: var test = selector instanceof Priv.Constructor; 错误是: `Unexpected 'instanceof'.` 我设置了最小标志: /*jslint browser this */ /*global window */ 可以在这里找到任何关于原因的信息: 我不想取消警告,我想了解它为什么会出现。在jslint.conf文件中,将“expr”选项设置为true以取消警告: {
var test = selector instanceof Priv.Constructor;
错误是:
`Unexpected 'instanceof'.`
我设置了最小标志:
/*jslint
browser
this
*/
/*global
window
*/
可以在这里找到任何关于原因的信息:
我不想取消警告,我想了解它为什么会出现。在
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');}
最后,很可能是代码的早期部分被破坏了,只是在到达
的实例之前,它没有得到应该关闭上一条语句的内容,在这种情况下,从您的角度抛出了“错误”错误 答案似乎是JSLint相信instanceof
会产生意想不到的结果
var myString = new String();
var newStr = new String('String created with constructor');
myString instanceof String; // returns true
newStr instanceof String; // returns true
看看这个,从:
真是出乎意料!您必须使用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
技巧,如下所示:
"[object String]" === Object.prototype.toString.call("adsfsad");
"[object String]" === Object.prototype.toString.call(myString);
"[object String]" === Object.prototype.toString.call(newStr);
都是真的
Crockford之前说过JSLint应该帮助您防止使用看起来像错误的习惯用法,或产生意外结果的代码。这就是这里发生的事情,以牺牲生命为代价。尽管记得 你能发布你的JSLint配置文件吗?另外,应该有一条与该行关联的实际错误消息,您也应该发布该消息。JSLint是一个过时的遗留文件。继续前进。还有更好的选择。如果你的公司坚持使用它,那么说服他们改变,或者继续前进。相信我,你有比和JSLint打架更好的事情要做。这也是真的,@torazaburo的+1,但既然他不能要求图书馆推荐书……你能提供完整的文件吗?我不想太惊讶,我想知道为什么会有这样的问题,所以你回答了一个你无法重现和不理解的问题,其中包括你要求OP尝试的随机猜测。“如果你认为这个问题是不可复制的,或者没有包含所有必要的信息,那么请留下评论,或者这些都是密切相关的原因。这可能比你想要的要严厉一些,”torazaburo说。我会说我的建议是最糟糕的猜测,到目前为止,我是唯一一个试图帮助他的人。“很抱歉,你觉得尝试没有用。”保罗-括号的方法奏效了。这是我最后一次使用jslint。这让我的代码看起来很愚蠢。@mikey balls是的,我现在大部分时间都在使用其他工具。代码样式检查作为一个概念是不错的,但是实现是不同的。