JSLint和JSHint在遇到使用new操作符操作String, Number, Boolean, Math或JSON时会抛出"Do not use {a} as a constructor"的错误。在下面的例子中,我们尝试着将一些值或变量放入这些对象中以作为构造函数调用:
这个错误是为了强调不好的实践以及一些并不会像你所预期的那样运行的代码。同时也强调了一种可能的严重的JavaScript错误。若不修改之,你的代码可能也能正常运行,但是会让其他的开发者感到困惑,当然其表现也会让人无法预期。
String, Number and Boolean的构造函数会返回String, Number and Boolean类型的对象,而这往往不是你想要的。通常你需要字符串、数字或者布尔值的字面量,因为严格比较一个对象和一个字面量总是会返回false。
为了防止这些对象并更改这个错误,使用字面量的值而非他们所对应的对象:
值得注意的是,这并不会丢失任何的功效,因为当你调用他们的方法时,字面量的值会在内部转换成这些类型的实力。同时你可以自由使用这些函数来实现类型的转换。比如调用他们而并不使用new操作符:
对于Math和JSON对象而言,转换还是有点不同的。这两个对象并不是函数,因此不能被构造。尝试着实例化他们的时候会导致一个TypeError。如果你尝试着将一个对象序列化为一个JSON字符串,你需要使用JSON.stringfiy方法代替之:
在JSHint1.0.0及以上版本中你可以通过一种特殊的选项语法来忽略任意警告。这个警告的标示符是W053。也就意味着你可以通过/*jshint -W053 */
告诉JSHint不再报告这个错误。