JavaScript
转字符串,主要有三种方式
(1)object.toString()
成员函数
(2)String(object)
全局函数
(3)JSON.stringify(object)
静态函数
object.toString()成员函数
- 适用于基本类型
-
null
和undefined
会报错 -
Number
类型可以指定进制基数,这是特色
var num = 10;
num.toString(); // '10',默认是十进制
num.toString(2); // '1010'
num.toString(8); // '12'
num.toString(10); // '10'
num.toString(16); // 'a'
- 直接数字字面量不能用,比如
10.toString(); // 报错
String(object)全局函数
- 双重身份,首先是字符类型的构造函数,比如
var a = new String('abcd');
a instanceof String; // true
参数可以是
null
和undefined
一般情况下,内部直接调用
object.toString()
成员函数完成转换,但是没有指定进制基数的功能对于自定义的类型,输出'[object Object]',信息丢失严重,是缺陷
var student = new Object();
student.name = "Lanny";
student.age = "25";
student.location = "China";
String(student); // "[object Object]"
- 对于数组,相当于调用
arrayObject.join(',');
。最外面的[]
被忽略。
String([1,2,3]); // "1,2,3"
String(["hello", "world"]); // "hello,world"
JSON.stringify(object)静态函数
- 专门用于字典,就是普通的自定义对象,能打印出所有的信息。这个比用
for-in
结构循环来遍历属性,变相转化为字符串要方便多了。
var student = new Object();
student.name = "Lanny";
student.age = "25";
student.location = "China";
var json = JSON.stringify(student);
console.log(json); // {"name":"Lanny","age":"25","location":"China"}
- 对于数组,能够保留最外面的
[]
,相比较而言,信息更保真
var arr = ["a", "b", "c"];
var str = JSON.stringify(arr);
console.log(str); // `["a","b","c"]`
String(arr); // "a,b,c"
全局函数工具
对于字典(自定义类型)和数组,用
JSON.stringify(object)
静态函数其他类型,用
String(object)
全局函数为了和系统的
object.toString()
成员函数相区别,取名叫globalToString(object)
实现文件
global_to_string.js
内容:
module.exports = function globalToString(object) {
var type = typeString(object);
if (type === 'object' || type === 'array') {
return JSON.stringify(object);
} else {
return String(object);
}
}
// private
function typeString(object) {
const string = Object.prototype.toString.call(object);
return string.substring(8, string.length - 1).toLowerCase();
}
- 测试文件
global_to_string_test.js
内容:
const getString = require('./global_to_string');
const log = console.log;
// 基本类型
log(getString(null)); // 'null'
log(getString(undefined)); // 'undefined'
log(getString(10)); // '10'
log(getString(true)); // 'true'
log(getString('abc')); // 'abc'
var object;
log(getString(object)); // 'undefined'
log(getString()); // 'undefined'
// 数组
log(getString(["hello", "world"])); // '["hello","world"]'
log(getString([])); // '[]'
// 自定义对象
var student = new Object();
student.name = "Lanny";
student.age = "25";
student.location = "China";
log(getString(student)); // '{"name":"Lanny","age":"25","location":"China"}'
log(getString({})); // '{}'