前端js如何生成一个对象,并转化为json字符串

<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="提交" οnclick="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对象,分配的是一块内存空间,你将这个对象插入到一个数组中,也是在数组内开辟一个空间指向这块内存,你在遍历是数组的容量是一直增大,但是都是指向与同一块内存对象,所以他们的值是一样的,而且是这个对象最后修改的那个值,所以最后数组的值一样,将对象在循环里面定义,则是我们想要的结果
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值