tubaba 发表于 2019-3-8 09:58:11

"MSScriptControl.ScriptControl" js方法substr结果有误

本帖最后由 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.js
function e(r) {
      return r.substr(-5,5)
}

如果在au3中执行,得到的结果是"长度为十的",其实这个结果是不正确的,因为根据substr的定义


正确的结果应该是"一个字符串",是不是很奇怪,知道错误的根源,解决也很容易
**** Hidden Message *****




zghwelcome 发表于 2019-3-8 10:41:34

谢谢分享,收藏了

862228699 发表于 2019-3-8 13:09:26

看不懂,学习一下。
页: [1]
查看完整版本: "MSScriptControl.ScriptControl" js方法substr结果有误