输入下面代码
然后使用 模拟器 或者 真机 (我用安卓机器 复现了!)
let modalObject = {
useMask: true,
title: "警告",
content: "这个是提示内容,你懂懂",
cancelLabel: "拒绝",
};
console.log("--keys-1-:" , Object.keys(modalObject));
console.log("---1-:" , modalObject);
console.log("--keys-2-:" , Object.keys(modalObject));
console.log("---2-:" , JSON.stringify(modalObject));
结果 输出:
–keys-1-: (4) [“useMask”, “title”, “content”, “cancelLabel”, object_id: 3081, native_class_name: “[noname]”]0: "useMask"1: "title"2: "content"3: "cancelLabel"native_class_name: "[noname]"object_id: 3081length: 4__proto__: Array(0)
Test.ts:25 —1-: {useMask: true, title: “警告”, content: “这个是提示内容,你懂懂”, cancelLabel: “拒绝”, object_id: 3082, …}
Test.ts:26 --keys-2-: (6) [“useMask”, “title”, “content”, “cancelLabel”, “object_id”, “native_class_name”, object_id: 3083, native_class_name: “[noname]”]0: "useMask"1: "title"2: "content"3: "cancelLabel"4: "object_id"5: "native_class_name"native_class_name: “[noname]“object_id: 3083length: 6__proto__: Array(0)
Test.ts:27 —2-: {“useMask”:true,“title”:“警告”,“content”:“这个是提示内容,你懂懂”,“cancelLabel”:“拒绝”,“object_id”:3082,“native_class_name”:”[noname]”}
会 凭空 添加了 两个属性
导致 我在 遍历 对象的时候 多出了 两个 !!!
原因 我找到了 是 因为 这一行 导致的
console.log("---1-:" , modalObject);
就是 用 逗号隔开的方式 输出了 对象
但是 这个 我相信 很多 开发者都在用。我自己搜索了一下
/Applications/CocosCreator/Creator/3.3.0/CocosCreator.app/Contents/Resources/resources/3d/engine-native/cocos/bindings/jswrapper/v8/Object.cpp
的 282行 左右
#if CC_DEBUG
this->_objectId = ++nativeObjectId;
this->setProperty("__object_id__", se::Value(this->_objectId));
this->setProperty("__native_class_name__", se::Value(cls ? cls->getName() : "[noname]"));
#endif
return true;
想问一下 官方 大佬 这个 是怎么回事 我应该如何解决 这个问题
我用 2.4.x 新建项目 不会 出现这个问题
希望 官方大佬 及时看到 给个解决方案,谢谢!
因为这个JS对象 是 作为参数 传给服务器 现在导致参数格式 错误 无法解决 !!
而且莫名其妙的多了字段 导致了 key 得到的length 变化 很不友好!

