如何使用 jslint 和 instanceof?
How can I use jslint and instanceof?
我在这条线上收到 "error":
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);
然后看看是否可以解决问题。如果不是,请查看是否通过独立检查 w/o 赋值得到错误,例如:
if(selector instanceof Priv.Constructor){ console.log('it is an instance');}
最后,很可能是您代码中较早的部分损坏了,只是它没有得到应该在到达 instanceof
之前关闭前一条语句的内容,在这种情况下"wrong" 错误是从您的角度来看抛出的。
看起来答案是 JSLint 相信 instanceof
可以产生 unintended/unexpected 结果。
看看这个,来自instanceof
's page at MDN:
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 的 "right" 答案是尝试 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. Though remember not to fret with micro-optimizations!
为代价
我在这条线上收到 "error":
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);
然后看看是否可以解决问题。如果不是,请查看是否通过独立检查 w/o 赋值得到错误,例如:
if(selector instanceof Priv.Constructor){ console.log('it is an instance');}
最后,很可能是您代码中较早的部分损坏了,只是它没有得到应该在到达 instanceof
之前关闭前一条语句的内容,在这种情况下"wrong" 错误是从您的角度来看抛出的。
看起来答案是 JSLint 相信 instanceof
可以产生 unintended/unexpected 结果。
看看这个,来自instanceof
's page at MDN:
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 的 "right" 答案是尝试 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. Though remember not to fret with micro-optimizations!
为代价