JavaScript 版 var_dump
昨日 Skype 上で、「JavaScript で PHP の var_dump
みたいなことができないか」という話が出たので、さらっと書いてみた。以下の点で不完全だが、書き殴りコードにつきご勘弁を。
- (配列を含む)オブジェクトのキーが文字列でなくても文字列と区別できない。
- 循環参照があると無限ループする。注意。
/*jslint devel: true */ function dump(value) { 'use strict'; if (typeof value !== 'object') { console.log(value); return; } var indent = ' '; // オブジェクトを再帰的に展開して、内容を表す文字列を返す function dumpRec(object, depth) { var isArray = Array.isArray(object), result = (isArray ? '[' : '{') + '\n', lines = [], v, s, key, i; for (key in object) { if (object.hasOwnProperty(key)) { s = ''; v = object[key]; for (i = -1; i < depth; i += 1) { s += indent; } s += key + ': ' + (typeof v === 'object' ? dumpRec(v, depth + 1) : v); lines.push(s); } } result += lines.join(',\n') + '\n'; for (i = 0; i < depth; i += 1) { result += indent; } result += isArray ? ']' : '}'; return result; } console.log(dumpRec(value, 0)); } var a = [1, 2, {a: 3, b: 4}, [5]]; dump(a); /* * 以下が出力される * [ * 0: 1, * 1: 2, * 2: { * a: 3, * b: 4 * }, * 3: [ * 0: 5 * ] * ] */