找回密码
 加入
搜索
查看: 1719|回复: 2

[系统综合] "MSScriptControl.ScriptControl" js方法substr结果有误

  [复制链接]
发表于 2019-3-8 09:58:11 | 显示全部楼层 |阅读模式
本帖最后由 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的定义


正确的结果应该是"一个字符串",是不是很奇怪,知道错误的根源,解决也很容易
游客,如果您要查看本帖隐藏内容请回复





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2019-3-8 10:41:34 | 显示全部楼层
谢谢分享,收藏了
发表于 2019-3-8 13:09:26 | 显示全部楼层
看不懂,学习一下。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 22:27 , Processed in 0.086622 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表