javascript - كود - طباعة محتوى كائن جافا سكريبت؟




كود الطباعة في الجافا سكريبت (10)

إذا كنت تريد فقط الحصول على تمثيل سلسلة لكائن ، فيمكنك استخدام وظيفة JSON.stringify ، باستخدام مكتبة JSON .

هذا السؤال لديه بالفعل إجابة هنا:

عادة إذا استخدمنا alert(object); ستظهر كـ [object Object] . كيفية طباعة جميع معلمات المحتوى لكائن في JavaScript؟


إذا كنت تستخدم Firefox ، alert(object.toSource()) كافياً لأغراض التصحيح البسيطة.


جافا سكريبت للجميع!

String.prototype.repeat = function(num) {
    if (num < 0) {
        return '';
    } else {
        return new Array(num + 1).join(this);
    }
};

function is_defined(x) {
    return typeof x !== 'undefined';
}

function is_object(x) {
    return Object.prototype.toString.call(x) === "[object Object]";
}

function is_array(x) {
    return Object.prototype.toString.call(x) === "[object Array]";
}

/**
 * Main.
 */
function xlog(v, label) {
    var tab = 0;

    var rt = function() {
        return '    '.repeat(tab);
    };

    // Log Fn
    var lg = function(x) {
        // Limit
        if (tab > 10) return '[...]';
        var r = '';
        if (!is_defined(x)) {
            r = '[VAR: UNDEFINED]';
        } else if (x === '') {
            r = '[VAR: EMPTY STRING]';
        } else if (is_array(x)) {
            r = '[\n';
            tab++;
            for (var k in x) {
                r += rt() + k + ' : ' + lg(x[k]) + ',\n';
            }
            tab--;
            r += rt() + ']';
        } else if (is_object(x)) {
            r = '{\n';
            tab++;
            for (var k in x) {
                r += rt() + k + ' : ' + lg(x[k]) + ',\n';
            }
            tab--;
            r += rt() + '}';
        } else {
            r = x;
        }
        return r;
    };

    // Space
    document.write('\n\n');

    // Log
    document.write('< ' + (is_defined(label) ? (label + ' ') : '') + Object.prototype.toString.call(v) + ' >\n' + lg(v));
};



// Demo //

var o = {
    'aaa' : 123,
    'bbb' : 'zzzz',
    'o' : {
        'obj1' : 'val1',
        'obj2' : 'val2',
        'obj3' : [1, 3, 5, 6],
        'obj4' : {
            'a' : 'aaaa',
            'b' : null
        }
    },
    'a' : [ 'asd', 123, false, true ],
    'func' : function() {
        alert('test');
    },
    'fff' : false,
    't' : true,
    'nnn' : null
};

xlog(o, 'Object'); // With label
xlog(o); // Without label

xlog(['asd', 'bbb', 123, true], 'ARRAY Title!');

var no_definido;
xlog(no_definido, 'Undefined!');

xlog(true);

xlog('', 'Empty String');

سيعطيك ذلك إخراجًا رائعًا للغاية باستخدام كائن JSON بمسافة بادئة:

alert(JSON.stringify(YOUR_OBJECT_HERE, null, 4));

تقوم الوسيطة الثانية بتغيير محتويات السلسلة قبل إعادتها. تحدد الوسيطة الثالثة عدد المسافات لاستخدامها كمسافة بيضاء للقراءة.


هل يمكن أن تستخدم العقدة util.inspect(object) لطباعة هيكل الكائن.

من المفيد بشكل خاص عندما يكون جسمك له تبعيات دائرية على سبيل المثال

$ node

var obj = {
   "name" : "John",
   "surname" : "Doe"
}
obj.self_ref = obj;

util = require("util");

var obj_str = util.inspect(obj);
console.log(obj_str);
// prints { name: 'John', surname: 'Doe', self_ref: [Circular] }

هذه الحالة JSON.stringify تطرح استثناء: TypeError: Converting circular structure to JSON


واجهت مشكلة مماثلة ، والسبب في ذلك هو أنني الاستفادة من اياكس لإحضار البيانات. في هذه الحالة كنت قد قدمت اثنين من دعوة اياكس غير متزامن. في واحد أنا فقط إرجاع رسالة السلسلة وتظهر في التنبيه. في مكالمة ajax الثانية أحضر arraylist في صيغة json ويفكّر في js. لذلك استخدم طلبي الثاني لمعالجة أولاً وكنت أتلقى التنبيه من الكائن.

لذلك فقط تحقق. 1. يجب أن يحتوي التنبيه على سلسلة. 2. إذا حصلت على arrayList أو أي كائن آخر فك ترميزه.

أتمنى لك كل خير!


وظيفة بسيطة لتنبيه محتويات كائن أو مصفوفة.
استدعاء هذه الوظيفة مع صفيف أو سلسلة أو كائن تنبيهات المحتويات.

وظيفة

function print_r(printthis, returnoutput) {
    var output = '';

    if($.isArray(printthis) || typeof(printthis) == 'object') {
        for(var i in printthis) {
            output += i + ' : ' + print_r(printthis[i], true) + '\n';
        }
    }else {
        output += printthis;
    }
    if(returnoutput && returnoutput == true) {
        return output;
    }else {
        alert(output);
    }
}

استعمال

var data = [1, 2, 3, 4];
print_r(data);

يجب مراعاة استخدام FireBug لتصحيح أخطاء جافا سكريبت. سوف يسمح لك بفحص كل المتغيرات الخاصة بك بشكل تفاعلي ، وحتى من خلال الوظائف.



يمكنك إعطاء الكائنات الخاصة بك أساليب toString الخاصة بها في نماذجها الأولية.







object