对于这个问题的劣质标题感到抱歉 - 我真的无法简洁地描述这个问题!
我无法弄清楚我的代码中发生了什么!我有一个看起来像这样的对象:
var fruits = {name: "bananas", quantity: "3"}
数量输入字段(#qty
),其值为(让我们说)2。
console.log(fruits);
alert(fruits[0].quantity); //outputs 3
fruits[0].quantity = Number(fruits[0].quantity) + Number($("#qty").val());
alert(fruits[0].quantity); //outputs 5
问题是,在所有这些运行之后,当我进入控制台检查console.log(fruits);
的输出时,控制台显示{name: "bananas", quantity: 5}
。
P.S。注意添加的数量和缺少引号!
任何想法发生了什么?
答案 0 :(得分:2)
这是因为分配给Number
的数量是"
。如果此数量为String
,则会显示双引号String
。
所以你能做的就是使用String()
的{{1}}函数将此数字转换为javascript
。
fruits[0].quantity = String(Number(fruits[0].quantity) + Number($("#qty").val()));
<强>输出强>
{name: "bananas", quantity: "5"}
答案 1 :(得分:1)
当您记录 JSON 的状态时,它会在您查看时显示对象的当前状态。 每当您从控制台打开对象时,您都会看到最新的更改。
<script> var fruits = {name: "bananas", quantity: "3"}
function fnincrement1(){
console.log(fruits);
}
function fnincrement2(){
fruits.quantity = Number(fruits.quantity)+3;
console.log(fruits);
}
</script>
<button onclick='fnincrement1()'>
button1
</button>
<button onclick='fnincrement2()'>
button2
</button>
为清晰起见,您可以查看the video of the above code。
答案 2 :(得分:0)
首先,您使用错误的方法从对象获取值,即fruits变量(json是有效对象)。 有两种方法可以获取对象的属性:
var obj = {
key1: value1,
key2: value2
};
使用点表示法:
obj.key1
使用方括号表示法:
obj["key2"]
当您知道属性的名称时,将使用第一个表单。当动态确定属性的名称时,将使用第二种形式。
我的猜测是你有一个对象数组。
类似的东西:
var fruits = [
{name: "bananas", quantity: "3"},
{name: "apples", quantity: "4"},
...
];
所以,如果是这种情况,你正在做类似的事情 -
fruits[0].quantity = Number(fruits[0].quantity) + Number($("#qty").val());
您正在选择水果阵列的第一个对象,即{name:&#34;香蕉&#34;,数量:&#34; 3&#34;}然后更改其数量&#39;属性为3 + 2(数字(水果[0]。数量)+数字($(&#34; #qty&#34;)。val()))即5(记住:这是一个数字不是一个字符串因为你使用Number()显式地使用了它。这就是为什么在console.log中你没有看到引号。
Number()是javascript中的一个函数,它返回传递给它的数值形式的值。因此,如果您执行Number(&#34; 30&#34;)之类的操作,它将返回30作为数字但不是字符串。