一、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方法存在安全問題,建議不要在生產環境中使用。