在Nashorn中启用乐观类型的嵌套对象中出现奇怪的行为(属性设置为零)
Strange behavior (properties set to zero) in nested objects with optimistic types enabled in Nashorn
这是在JDK 8u102上。我看到一些奇怪的行为当乐观类型被设置为真时对象的某些属性被设置为零。下面是演示该行为的jjs
脚本:
var config = {};
var creativeDetails = {
fanpage_id: config.fanpage_id || "293867224112667",
image_url: config.image_url || "http://some.url",
title: config.title || "Ad Title",
description: config.description || "Ad Description",
link_description: config.link_description || "Link Description",
call_to_action: config.call_to_action || "LEARN_MORE",
destination_url: "http://some.url",
link_body: config.link_body || "Link Body"
};
var linkData = {
call_to_action: {
type: creativeDetails.call_to_action,
value:{
link_caption: creativeDetails.link_description,
link: creativeDetails.destination_url
}
},
link: creativeDetails.destination_url,
picture: creativeDetails.image_url,
message: creativeDetails.description,
name: creativeDetails.title
};
print(JSON.stringify(linkData, null, 4) + "'n");
在不带任何参数的jjs
下运行此命令:
{
"call_to_action": {
"type": "LEARN_MORE",
"value": {
"link_caption": "Link Description",
"link": "http://some.url"
}
},
"link": "http://some.url",
"picture": "http://some.url",
"message": "Ad Description",
"name": "Ad Title"
}
而与jjs --optimistic-types=true
一起运行则得到:
{
"call_to_action": {
"type": "LEARN_MORE",
"value": {
"link_caption": "Link Description",
"link": "http://some.url"
}
},
"link": 0,
"picture": 0,
"message": 0,
"name": 0
}
将||
表达式改为三元并没有改变其行为。然而,在初始化linkData
对象之前,以任何方式引用creativeDetails
对象的属性(例如,将其赋值给另一个变量或将其打印出来),最终会打印出预期的结果。
奇怪的是,嵌套对象得到了正确的值,而外部对象却没有。只有在使用有问题对象的属性初始化嵌套对象的属性时,才会出现这种行为。例如,下面的代码不会导致这个问题:
var linkData = {
link: creativeDetails.destination_url,
picture: creativeDetails.image_url,
message: creativeDetails.description,
name: creativeDetails.title
};
我知道Nashorn的乐观类型是通过假设某物的类型是int
,然后逐步降级到Object
来工作的。所以这可能与此有关,但我不确定这是如何发生的,或者为什么会发生。有人看到这种行为吗?
这是Nashorn的一个bug,现在已经解决了
相关文章:
- 将属性设置为未定义时未通知观察者
- 是否有任何内置方法可以更改JavaScript对象'的属性设置为某个值
- 附加'沙箱'属性设置为动态创建的iframe以停止重定向
- 如何将按钮的数据属性设置为输入[type=text]中设置的任何值
- 在jquery中,从同一对象的属性设置输入字段和标签的正确方法是什么
- 当可见属性设置为 false 时,使用 JavaScript 删除空格
- 无法使用 Snap.SVG将“填充”属性设置为“继承”
- 使用jQuery为属性设置新值
- 是否可以通过属性's值,并将属性设置为parentNode
- 如何使用按钮的jsp点击事件将属性设置为struts-bean
- 在ember.js记录上使用toJSON,将其中一个属性设置为null
- javascript函数属性设置器中的延迟
- 添加“;选中'属性设置为jquery中的复选框
- jQuery/JavaScript按属性设置数组
- Dojo.将JSon中的属性设置为HTML属性
- 将class属性设置为元素不适用于javascript和jquery
- 将属性设置为对对象的引用
- 如何将显示属性设置为与内联!重要的
- jQuery-根据HTML属性设置CSS维度
- 为什么我不能在 JavaScript 中将对象属性设置为空字符串