Console.log从以后的代码输出数据

时间:2016-10-31 09:12:44

标签: javascript console.log

对于这个问题的劣质标题感到抱歉 - 我真的无法简洁地描述这个问题!

我无法弄清楚我的代码中发生了什么!我有一个看起来像这样的对象:

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。注意添加的数量和缺少引号!

任何想法发生了什么?

3 个答案:

答案 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作为数字但不是字符串。