JSLint和我的Javascript——使这个脚本符合要求的最佳实践
JSLint and my Javascript - Best practices on making this script conform
我组合的一个函数(在JSLint下运行但不验证)如下:
function toNumber(str)
{
str = str.toString().replace(/[^0123456789.-]/g,'');
if (str == "") {return 0;}
return parseFloat(str);
}
这是为了获取任何给定的字符串,并将其转换为数字,以便在我的javascript中的其他地方使用。示例运行如下:
toNumber("5")=>5
toNumber("3276")=>3276
toNumber("-14b396Z")=>-14396
这里的问题是,当我尝试用JSLint验证它时,我会遇到两个无法解决的错误。
line 25 character 36 str = str.toString().replace(/[^0123456789.-]/g,'');
Insecure '^'.
line 25 character 48 str = str.toString().replace(/[^0123456789.-]/g,'');
Unescaped '-'.
我知道我可以打开/RegExp/中的"and[^…]"来忽略第一个错误,但这仍然会留下第二个错误。解决这两个错误的最佳方法是什么?我想,如果我无论如何都要重写这篇文章,我还不如对这两个错误都重写,而不是对使用^的"不安全"性质视而不见。
谢谢,-Aaron Nichols
好的,那么,首先,toNumber
是否按照您的意愿处理"123.12.3"answers"123.-123"?
但如果我们不担心这样的事情,只想复制你最初得到的东西,这并不太难。
JSLint告诉您的是,正则表达式不应该说出不想要的东西,而应该定义想要的东西
在这种情况下,这真的很容易做到。与其说"我想替换而不是数字、点或破折号的任何东西,看看我是否什么都没有了",不如说"我想要从字符串开始到结束的所有东西,都是一个数字、点、破折号,或者我根本不想要匹配"。
我不太喜欢多次返回,如果我在null
检查后return parseFloat(str);
,JSLint会给你一个Unnecessary 'else' after disruption
,所以让我们也放一个返回var。
/*jslint sloppy:true, white:true */
function toNumber2(str)
{
var retVal = 0;
if (null !== str.match(/^[0123456789.'-]+$/))
{
retVal = parseFloat(str);
}
return retVal;
}
所以我做得有点快,但我认为这和你最初想要的是一样的。
我知道在你的特定情况下,这个规则有点过头了,但在更复杂的情况下,当你"不"^
序列时,很容易让无意的匹配溜走。在那些更复杂的情况下,这个规则可以成为合乎逻辑的救命稻草。
- java脚本网站最佳实践
- 使用javascript:在没有阻止html标记(<b>、<p>等)的情况下,阻止脚本的最佳方法
- 将参数传递到外部 JS 脚本的最佳方法
- Chrome扩展:在后台页面和网站页面脚本之间进行通信的最佳方法
- 在没有JQuery的情况下加载HTML主体之后调用JavaScript脚本的最佳方式
- 使用 Angularjs 加载 JavaScript 脚本的最佳方法是什么?
- 我的原生脚本应用程序的最佳结构
- 同时使用 jquery 加载和重新加载脚本的最佳方法
- Javascript:处理用户生成脚本的最佳方式
- JSLint和我的Javascript——使这个脚本符合要求的最佳实践
- 用值列表填充文本框的最佳方法是使用java脚本或jquery双击
- 将脚本添加到窗口对象的最佳方法
- 提供嵌入脚本的最佳方式
- 在Google脚本中尝试/捕获HTTP响应的最佳方式
- 使用java脚本访问DVD驱动器等硬件的最佳方式是什么
- 从第三方站点配置Javascript的最佳方式是什么's脚本/include标记
- 什么'这是比较Google Sheets中两列数据并使用Google脚本仅输出不匹配数据的最佳方法
- 我在哪里可以找到一些关于最佳脚本/缩进样式的文档
- 在特定页面上执行特定JS脚本的最佳实践
- 制作多语言网站、复制粘贴页面的最佳解决方案是什么?脚本