web-dev-qa-db-ja.com

Javascriptエラー:オブジェクトをプリミティブ値に変換できません

次のJavaScriptコードを使用してこのエラーを受け取ります。

function tempTest(evt) {
    alert(evt.currentTarget.id);
    ct = document.getElementById(evt.currentTarget.id);
    rslt = document.getElementById('rslt');
    var props;
    for (var prop in ct) {
        if (ct.hasOwnProperty(prop)) {
            propVal = ct[prop];
            var propDat = prop + ' = ' + propVal;
            props += propDat + '<br/>';
        }
    }
    rslt.innerHTML = props;
}

これは私を困惑させました。何か案は?

11
Eric

HTML要素のすべてのプロパティがプリミティブであるわけではありません。たとえば、親、子などもHTML要素です。文字列や数字としてだけ使用することはできません。
そこに条件を追加し、それに応じてそのプロパティを使用する必要があります。

(OP:)

この投稿につまずいた人のために、更新されたスニペットを投稿したかっただけです...

function tempTest(evt) {
    alert(evt.currentTarget.id);
    ct = document.getElementById(evt.currentTarget.id);
    rslt = document.getElementById('rslt');
    var props;
    for (var prop in ct) {
        if (ct.hasOwnProperty(prop)) {
            var propVal = ct[prop];
            props += prop + ' (' + typeof(prop) + ')' + ' = ';
            if (typeof(ct[prop]) == 'string') {
                propVal += ct[prop];
            } else {
                if (propVal != null && propVal.toString) {
                    props += propVal.toString();
                } else {}
            }
            props += '<br/>';
        }
    }
    rslt.innerHTML = props;
}
2
Eliran Malka

問題のオブジェクトがjsonの場合、JSON.stringify(thingThatIsJson)を呼び出すと、文字列が返されます。 .toString()はjsonでは機能しません。

これは、console.log()で機能するreq.bodyのようなものを扱っている人へのメッセージです。これは、他の方法では文字列のように動作しない可能性があるため、かなり混乱します(追加しようとしているときなど)。別の文字列に)。

1
Glen Pierce

問題は、コードのpropVal部分にあります。それは文字列に変換されないかもしれないので。

0
Ankit