我从html onclick监听器调用此函数,其参数是表示地址的十六进制数,但输出是十进制形式的相同数字。我尝试转换回来,但它将十六进制数字四舍五入。为什么函数调用首先转换十六进制数?
flexcard += '<button class="mod marg" onclick="App.fundProject('+thisProjectAddress+')">Fund project</button>';
答案 0 :(得分:1)
如果您的代码中没有引号定义thisProjectAddress
,则它被解释为十六进制数而不是字符串,因此通常将表示为十进制数字。例如:
console.log(0x100) // => 256
console.log("0x100") // => 0x100
此外,即使它被存储为字符串,您也会将其作为flexcard
的参数写入App.fundProject
而不带引号。这意味着flexcard
的这一点可能如下所示:
<button class="mod marg" onclick="App.fundProject(0x100)">Fund project</button>
因为,与第一个例子一样,十六进制数是在没有字符串的情况下传递的,它被解释为一个数字,函数将适当地处理它。无论输出App.fundProject
涉及其参数,其处理方式与您通过256
而不是0x100
的方式相同。如果您希望将其保留为十六进制表示形式,请将其作为字符串而不是数字传递:
flexcard += '<button class="mod marg" onclick="App.fundProject(\''+thisProjectAddress+'\')">Fund project</button>';
这将产生此输出:
<button class="mod marg" onclick="App.fundProject('0x100')">Fund project</button>