女猿1024互联网科技

对象作为参数提示[object Object]

2020-03-19  本文已影响0人  代艳霞

坑人的[object Object],有时候为了逻辑处理起来更方便,我们可能需要给某一个函数传一个对象,这样操作可以省去我们的数据遍历,但是每次操作都是报错[obj,obj],吃了几次亏,这次打算找一下原因,不然每次都要为了避免出现这样的错误而改为用其他方式来实现,这不是一个明智的选择。

首先给函数传一个对象作为参数,代码如下:

<body>
<div class="small-img-look"></div>
<script src="zepto.min.js"></script>
<script>
    var items=[
        {url:"//baidu.com", title:"111对象转字符串", id:1,},
        {url:"//baidu.com", title:"222对象转字符串", id:2,},
        {url:"//baidu.com", title:"333对象转字符串", id:3,},
        {url:"//baidu.com", title:"444对象转字符串", id:4,},
    ];
    function userobj(items0){
        var HTML = "";
        HTML+='<p class="detial-title">'+items0.title+'</p>';
        $(".small-img-look").html(HTML);
    }

    userobj(items[0]);

</script>
</body>

传对象参数 传参的类型

通过调试和typeof判断items0的类型是一个object。这说明函数是可以传一个对象作为参数的。但是项目中,元素往往都是以字符串的形式拼接而成的,代码如下:

<body>

<ul class="list"></ul>
<div class="big-img-look"></div>

<script src="zepto.min.js"></script>
<script>
    var items=[
        {url:"//baidu.com", title:"111对象转字符串", id:1,},
        {url:"//baidu.com", title:"222对象转字符串", id:2,},
        {url:"//baidu.com", title:"333对象转字符串", id:3,},
        {url:"//baidu.com", title:"444对象转字符串", id:4,},
    ];
function getList() {
        var timeHTML = "";
        for (var i = 0; i < items.length; i++) {
            timeHTML+= "<li  onclick='coverImg("+items[i] + ")'>";
            timeHTML+= items[i].title;
            timeHTML+= '</li>';
        }
        $(".list").html(timeHTML);
    }
function coverImg(currentItems) {
    var HTML = "";
    HTML+='<p class="detial-title">'+currentItems.title+'</p>';
    $(".big-img-look").html(HTML);
}

getList();

</script>
</body>
错误提示 Object toString

所以按照我们页面的逻辑,我们是用字符串拼接的方式进行传参,而我们给函数coverImg传的是一个对象,对象被转换为[object Object],页面解析以后的结果也就是我们看到的coverImg([object Object]),那原因已经知道了,如何解决这个问题呢?很简单,为了避免对象自动调用toString()方法,我们需要在拼接之前。手动把对象转化为字符串,这样多个字符串就会进行拼接,而不需要后台进行类型转换了。为了保持对象的结构的完整性,我们可以用JSON.stringfy()方法,把一个对象转换为JSON字符串,如下所示:

  timeHTML+= "<li  onclick='coverImg("+items[i]+ ")'>";
  修改为
  timeHTML+= "<li  onclick='coverImg("+JSON.stringify(items[i]) + ")'>";
对象转json

此时页面才可以正常显示,从此再也不怕[object Object]了。

上一篇下一篇

猜你喜欢

热点阅读