本帖最后由 tubaba 于 2019-3-8 10:33 编辑
发现一个有趣的问题,不知道各位同学知道是什么原因么?
是关于对象"MSScriptControl.ScriptControl"中javascript的substr方法,与实际定义得到的结果不同.这是我在计算百度翻译sign值时发现的,这个问题足足困扰了我几天,当字符串的长度超过30时,得到的sign值与网页版javascript值完全不一样.而在30以内是相一致的.我曾一度以为百度还在某个地方设了个暗桩.绕了好久才发现这个问题.
#AutoIt3Wrapper_UseX64=n
$t = _RunScript("e('长度为十的一个字符串')",FileRead('test.js'))
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $t = ' & $t & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
Func _RunScript($The_Function = "", $The_code = "", $Language = "JavaScript")
Local $Result, $The_Objict
$The_Objict = ObjCreate("ScriptControl")
;ScriptContro语言Language设定,可以为JavaScript,VBScript等
$The_Objict.language = $Language
$The_Objict.AddCode($The_code)
$Result = $The_Objict.Eval($The_Function)
$The_Objict = 0 ;注销对象
Return $Result
EndFunc ;==>_RunScript
//test.jsfunction e(r) {
return r.substr(-5,5)
}
如果在au3中执行,得到的结果是"长度为十的",其实这个结果是不正确的,因为根据substr的定义
正确的结果应该是"一个字符串",是不是很奇怪,知道错误的根源,解决也很容易
|