Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用jslint和instanceof?_Javascript_Jslint - Fatal编程技术网

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是的,我现在大部分时间都在使用其他工具。代码样式检查作为一个概念是不错的,但是实现是不同的。