2.4.4 版本的 typescript.js _spreadArrays 存在为null的问题

  • Creator 版本: 2.4.4

  • 目标平台:web

  • 重现方式:
    testFunc(a:number, …values:any){
    console.log(a);
    console.log(values);
    }
    test(a:number, args:any[]=null){
    testFunc(a, …args);
    }

test(1);

  • 首个报错:
    Uncaught TypeError: Cannot read property ‘length’ of null
    at 494.window.__spreadArrays (cocos2d-js-for-preview.js:223353)

  • 之前哪个版本是正常的: 2.2

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率:

window.__spreadArrays = function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};

断点跳进去 其实就是在这里展开参数的时候报错。这里 arguments = [1, null];所以arguments[i].length就会报null的错

@jare

???,所以你要表达什么?自己写的代码有问题跟typescript和creator有啥关系吗? :clown_face:

一看你就是没看过源码。自己去下载个2.4.4版本和2.2版本来试就知道我要说的是什么了

__spreadArrays方法是ts的(…)展开数组操作符的es5等价代码,当你test(1)的时候,函数内遇到…args这个时候就会执行__spreadArrays,但这个时候args为null,null.length自然会报错,解决方法是使用(…)操作符展开之前保证非空

这个跟源码有关系?不会连js都还没搞懂吧? :clown_face:

请对比一下两个版本下的resources/engine/polyfill/typescript.js 在来哔哔:clown_face:

还有先自己去测试来再来

这还需要对比?不管哪个版本你这代码就是有问题,以前能跑靠的是运气而已 ,啥也不懂就提源码,跳梁:clown_face:

自己没测试过的,就不要来瞎哔哔,装大神。啥也不是的B 好走不送

试过再来吠,不然我就只能当是野狗在发情了

头都要笑掉了 :clown_face:

是的,我都笑得肚子疼了, 啥也不是的狒狒,还再装

留图吃瓜 :clown_face:

坐看小丑表演

TS3.6之前自动做了非空处理就以为自己的代码没问题?TS3.6之后出于严谨考虑去掉了非空处理直接抛出错误就哭爹喊娘 。 跳梁 :clown_face:



遵循ECMA2015,(…)展开的对象为null时,抛出异常才是正确的结果

继续咬,使劲咬,反正我打了狂犬疫苗,一点都没在怕 :dog:

3.6后更新的这个方法并不是出于严谨考虑 而抛出异常。而且为了在没有使用–downlevelIteration的时候正确展开组数。不要没弄明白因为就瞎扯

downlevelIteration配置项跟你这个展开null对象抛异常有何关系?有的话为什么不把文档贴出来?还是说你说啥就是啥?归根揭底还是你代码本身就有问题,死鸭子嘴硬 :clown_face:

不看代码,不测试,不看log的 不要跟我再这疯叫