一、JSON.stringify方法
JSON.stringify方法是将一个javascript对象或值转换成为一个 JSON字符串。
使用方法如下:
var obj = { name: 'Tom', age: 18, grade: { math: 90, english: 95 }, hobbies: ['reading', 'music'] }; var str = JSON.stringify(obj); console.log(str);
执行结果为:
{"name":"Tom","age":18,"grade":{"math":90,"english":95},"hobbies":["reading","music"]}
json字符串还可以通过JSON.parse方法转换成js对象
代码如下:
var obj = JSON.parse(str); console.log(obj);
执行结果为:
{name: "Tom", age: 18, grade: {…}, hobbies: Array(2)}
二、Function方法
Function是js中的一个对象,它有一个toSource方法,可以把一个Function对象转换成js代码。如果把对象通过toSource方法转为代码,并去掉function(...)(){...}里的function和(),就可以得到这个对象的代码形式。
使用方法如下:
var obj = { name: 'Tom', age: 18, grade: { math: 90, english: 95 }, hobbies: ['reading', 'music'] }; var str = (function(){return this;}).call(obj).toSource(); console.log(str);
执行结果为:
({name:"Tom",age:18,grade:{math:90,english:95},hobbies:["reading","music"]})
三、eval方法
eval方法可以执行一段字符串形式的js代码,把一个js对象转换成一个可执行的js字符串,所以可以用eval方法直接把一个对象转换成一个字符串。
使用方法如下:
var obj = { name: 'Tom', age: 18, grade: { math: 90, english: 95 }, hobbies: ['reading', 'music'] }; var str = eval('(' + JSON.stringify(obj) + ')'); console.log(str);
执行结果为:
{name: "Tom", age: 18, grade: {…}, hobbies: Array(2)}
四、toString方法
toString方法是Object对象的一个原型方法,可以将一个对象转换成字符串。但是这个方法只能将一个对象转换成"[object Object]"这种基本形式的字符串。
我们可以通过重写Object对象的toString方法来实现对象转字符串。
使用方法如下:
Object.prototype.toString = function(){ return JSON.stringify(this); } var obj = { name: 'Tom', age: 18, grade: { math: 90, english: 95 }, hobbies: ['reading', 'music'] }; console.log(obj.toString());
执行结果为:
{"name":"Tom","age":18,"grade":{"math":90,"english":95},"hobbies":["reading","music"]}
五、自定义方法
我们也可以通过自定义实现将一个js对象转换成字符串。
示例代码如下:
function obj2str(obj, len){ var ndeep = len || 1; var gap = ''; var indent = ''; var i = 0; for(i = 0; i < ndeep; i++) { indent += ' '; } gap = ndeep > 1 ? '\n' : ''; if(typeof obj === 'object') { var str = ''; if(obj.constructor === Array) { for(i = 0; i < obj.length; i++) { str += gap + indent + obj2str(obj[i], ndeep + 1) + ', '; } return '[' + str.slice(0, -2) + '\n' + indent + ']'; } else { for(var prop in obj) { str += gap + indent + '"' + prop + '": '; if(typeof obj[prop] === 'object') { str += obj2str(obj[prop], ndeep + 1) + ', '; } else if(typeof obj[prop] === 'function') { str += 'undefined' + ', '; } else { str += '"' + obj[prop] + '", '; } } return '{' + str.slice(0, -2) + '\n' + indent + '}'; } } else { if(typeof obj === 'string') { obj = '"' + obj + '"'; } return String(obj); } } var obj = { name: 'Tom', age: 18, grade: { math: 90, english: 95 }, hobbies: ['reading', 'music'] }; var str = obj2str(obj); console.log(str);
执行结果为:
{ "name": "Tom", "age": "18", "grade": { "math": "90", "english": "95" }, "hobbies": [ "reading", "music" ] }
六、总结
以上是JS对象转字符串的几种方法,可以根据实际需要进行选择。需要注意的是,Function和eval方法存在安全问题,建议不要在生产环境中使用。