2016-10-31 2 views
2

この質問のお粗末なタイトルについては申し訳ありません - 私は本当に問題をもう少し簡潔に記述することはできません!後でコードからデータを出力するConsole.log

私のコードで何が起こっているのか分かりません! 、問題はこの後のすべてが実行されることである

var fruits = {name: "bananas", quantity: "3"} 

そして、値が(さんが言わせて)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 

数量入力フィールド(#qty):私はこのようになりますオブジェクトを持っていますconsole.log(fruits);の出力を調べるためにコンソールに入ると、コンソールに{name: "bananas", quantity: 5}と表示されます。

P.S.追加された数量と引用符がないことに注目してください。

何が起こっているのですか?

+0

なぜ '果物[0]'? '0'という配列やプロパティはありません。あなたのコードはまったく動くべきではありません(もしそうなら、出力は正しいでしょうか?)。 –

+0

'アラート(果物[0] .quantity); // outputs 3' - no、未定義の値の 'quantity'を読み込もうとしているので例外がスローされます。本当に私たちに教えてください[MCVE] – Quentin

+0

ありがとうございます。私が 'fruits 'ではなく' fruits'を含む理由は、 '[0]'を省略すると 'undefined'と' NaN'を私の 'alert()s'として受け取ることです。 @クエンティン、なぜあなたはその未定義の価値を考えているのか分からない...しかし、はい、あなたの重複した提案が答えであるように見えます。コンソールが実際にそれを記録する前に、変数が操作(追加)されるので、変数自体ではなく変数のコピーがconsole.logにあったという提案がありました。なぜなら、最終的にログに記録すると、値。 – Brad

答えて

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を表示することができます。

0

まず、オブジェクトから値、すなわちfruits変数(jsonは有効なオブジェクト)を取得するために間違った方法を使用しています。 オブジェクトのプロパティを取得するには、2つの方法があります。

var obj = { 
    key1: value1, 
    key2: value2 
}; 

ドット表記を使用する:

obj.key1 

は、角括弧表記を使用:

obj["key2"] 

あなたが知っているとき最初の形式が使用されていますプロパティの名前。第2の形式は、プロパティの名前が動的に決定されたときに使用されます。

私はあなたがオブジェクトの配列を持っていると思います。

のような何か:だから、これが事実であるとあなたのような何かをやっている場合

var fruits = [ 
{name: "bananas", quantity: "3"}, 
{name: "apples", quantity: "4"}, 
... 
]; 

- あなたは果物の配列すなわち、{名前の最初のオブジェクトを選択している

fruits[0].quantity = Number(fruits[0].quantity) + Number($("#qty").val()); 

:「バナナを"、quantity:" 3 "}そして、 'quantity'プロパティを3 + 2(Number(fruits [0] .quantity)+ Number($("#qty ")。val())に変更する。 (Remember:Number()を使用して明示的にキャストしたため、文字列ではない数値です)。だから、console.logには引用符が見えません。

Number()は、渡される数値の数値形式を返すjavascriptの関数です。だから、もしあなたがNumber( "30")のようなことをすれば、文字列としてではなく数字として30を返します。

2

これは、fruits[0].quantityに割り当てられている数量がNumberであるためです。この数量がStringの場合、二重引用符"が表示されます。

あなたができることはStringにの機能を使用してjavascriptを使用してこの数値をタイプキャストすることです。

fruits[0].quantity = String(Number(fruits[0].quantity) + Number($("#qty").val())); 

出力

{name: "bananas", quantity: "5"} 
関連する問題