在高级模式下通过closure-compiler优化我的JS时,我收到警告消息并且没有编译。
JSC_TYPE_MISMATCH:实际参数1 Document.prototype.getElementById与形式参数
不匹配
我的js函数更改了div的类
for (kx = 1; kx <= 5;kx=kx+1) {
document.getElementById(kx).className='newclass';
}
在HTML中我有五个div如下
<div id='1' class ='first'> contents </div>
<div id='2' class ='first'> contents </div>
<div id='3' class ='first'> contents </div>
<div id='4' class ='first'> contents </div>
<div id='5' class ='first'> contents </div>
此代码在正常情况下工作(没有压缩/优化),但在尝试优化它时显示警告/错误,我该如何解决?
答案 0 :(得分:4)
Closure希望您将string
传递给document.getElementById()
而不是number
。
JSC_TYPE_MISMATCH:实际参数1 Document.prototype.getElementById与形式参数
不匹配 发现:号码 必需:字符串
在第3行第24个字符document.getElementById(kx).className='newclass';
因此,明确地将kx
转换为string
1 应删除该警告:
for (kx = 1; kx <= 5; kx++) {
document.getElementById(kx.toString()).className='newclass';
}
但是,我不知道我会打扰他。原来实际编译。你有一个警告而不是一个错误(我怀疑),因为一个数字参数将被强制转换为一个字符串。也就是说,如果您的环境通过各种方式促进对错误的警告......跳过篮球。
1 值得注意的是,您可以通过简单地连接空字符串,即:''+kx
,并允许type-coercion来将数字转换为字符串做它的事。我选择使用Number.prototype.toString()
因为,为了实例,方法调用更清楚地表明了意图。