一,直接上代碼
<script src="../../Content/jquery-2.0.3.min.js" type="text/javascript"></script> <script type="text/javascript"> function aa() { var json = []; var j = {}; for (var i = 1; i < 5; i++) { j.name = "name"; j.cars = "22"; j.obj = "457"; json.push(j); } var a = JSON.stringify(json); alert(a); } </script> <div> <input type="button" value="提交" onclick="aa()" /> </div>
綜上:理解是定一個數組和一個對象,將對象插入到數組,然后裝換成JSON字符串的邏輯
二,以上代碼會出現一個問題:當你插入i的值是發現輸出的一直都是最后一個對象的JSON
<script type="text/javascript"> window.onload = function () { var json = []; var j = {}; for (var i = 1; i < 5; i++) { j.name = "name"; j.cars = "22"; j.obj = i; json.push(j); } var a = JSON.stringify(json); alert(a); } </script>
經過JS調試發現,寫成這樣才是我們想要的結果:(將J的定義寫在遍歷里面)
<script type="text/javascript"> window.onload = function () { var json = []; for (var i = 1; i < 5; i++) { var j = {}; j.name = "name"; j.cars = "22"; j.obj = i; json.push(j); } var a = JSON.stringify(json); alert(a); } </script>
原因: 在JS定義出來的變量是Object對象,分配的是一塊內存空間,你將這個對象插入到一個數組中,也是在數組內開辟一個空間指向這塊內存,你在遍歷是數組的容量是一直增大,但是都是指向與同一塊內存對象,所以他們的值是一樣的,而且是這個對象最后修改的那個值,所以最后數組的值一樣,將對象在循環里面定義,則是我們想要的結果