◆

JavaScript toString 方法与判断数据类型

2023-02-02 01:370

toString

toString(radix)方法:除 undefined 和 null 之外的所有类型的值都具有 toString() 方法,其作用是返回对象的字符串表示。

var o1 = new Object();
o1.toString(); // "[object Object]"

var o2 = { a: 1 };
o2.toString(); // "[object Object]"

字符串 [object Object] 本身没有太大的用处,但是通过自定义 toString 方法,可以让对象在自动类型转换时,得到想要的字符串形式。

当对象用于字符串加法时,会自动调用 toString 方法。由于自定义了 toString 方法,所以返回字符串 hello world。

var obj = new Object();

obj.toString = function () {
  return 'hello';
};

console.log(obj + ' ' + 'world'); // "hello world"

数组、字符串、函数、Date 对象都分别部署了自定义的 toString 方法,覆盖了 Object.prototype.toString 方法。

[1, 2, 3].toString(); // "1,2,3"

'123'
  .toString()(
    // "123"

    function () {
      return 123;
    },
  )
  .toString()(
    // "function () {
    //   return 123;
    // }"

    new Date(),
  )
  .toString();
// "Tue May 10 2016 09:11:31 GMT+0800 (CST)"

上面代码中,数组、字符串、函数、Date 对象调用 toString 方法,并不会返回 [object Object],因为它们都自定义了 toString 方法,覆盖原始方法。

对象返回值
Array将 Array 的元素转换为字符串。结果字符串由逗号分隔,且连接起来。
Boolean如果 Boolean 值是 true,则返回 “true”。否则,返回 “false”。
Date返回日期的文字表示法。
Error返回一个包含相关错误信息的字符串。
Function返回如下格式的字符串,其中 functionname 是被调用 toString 方法函数的名称:function functionname( ) { [native code] }。
Number返回数字的文字表示。
Object返回 “[object objectname]”,其中 objectname 是对象类型的名称。
String返回 String 对象的值。

toString() 的应用:判断数据类型

Object.prototype.toString 方法返回对象的类型字符串,因此可以用来判断一个值的类型。

var obj = {};
obj.toString(); // "[object Object]"

上面代码调用空对象的 toString 方法,结果返回一个字符串 object Object,其中第二个 Object 表示该值的构造函数。这是一个十分有用的判断数据类型的方法。

由于实例对象可能会自定义 toString 方法,覆盖掉 Object.prototype.toString 方法, 所以为了得到类型字符串,最好直接使用 Object.prototype.toString 方法。通过函数的 call 方法,可以在任意值上调用这个方法,帮助我们判断这个值的类型。

Object.prototype.toString.call(value);

上面代码表示对 value 这个值调用 Object.prototype.toString 方法。

不同数据类型的 Object.prototype.toString 方法返回值如下。

  • 数值:返回 [object Number]。
  • 字符串:返回 [object String]。
  • 布尔值:返回 [object Boolean]。
  • undefined:返回 [object Undefined]。
  • null:返回 [object Null]。
  • 数组:返回 [object Array]。
  • arguments 对象:返回 [object Arguments]。
  • 函数:返回 [object Function]。
  • Error 对象:返回 [object Error]。
  • Date 对象:返回 [object Date]。
  • RegExp 对象:返回 [object RegExp]。
  • 其他对象:返回 [object Object]。
Object.prototype.toString.call(2); // "[object Number]"
Object.prototype.toString.call(''); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(Math); // "[object Math]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call([]); // "[object Array]"

通过 toString 判断数据类型

var type = function (o) {
  var s = Object.prototype.toString.call(o);
  return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};

type({}); // "object"
type([]); // "array"
type(5); // "number"
type(null); // "null"
type(); // "undefined"
type(/abcd/); // "regex"
type(new Date()); // "date"
<script>
  // 将 Array 的元素转换为字符串。结果字符串由逗号分隔,且连接起来。
  var arr = new Array(1, 'mio', '88');
  // 数组测试: 1,mio,88
  console.log('数组测试:', arr.toString());

  // 如果 Boolean 值是 true,则返回 “true”。否则,返回 “false”。
  var boolean = new Boolean(false);
  // 布尔测试:"false"
  console.log('布尔测试:', boolean.toString());

  // 返回日期的文字表示法。
  var date = new Date('2020-01-01 20:30:30');
  // Date测试: Wed Jan 01 2020 20:30:30 GMT+0800 (中国标准时间)
  console.log('Date测试:', date.toString());

  // 返回如下格式的字符串,其中 functionname 是被调用 toString 方法函数的名称:function functionname( ) { [native code] }
  var fun = new Function();
  console.log('函数测试:', fun.toString());

  // 数字值。
  var number = new Number(3.14);
  // 数字测试: 3.14
  console.log('数字测试:', number.toString());

  // 对象本身
  var obj = new Object({});
  // 对象测试: [object Object]
  console.log('对象测试:', obj.toString());

  // 字符串值
  var str = new String('3.1415');
  // 字符串测试: 3.1415
  console.log('字符串测试:', str.toString());
  // true
  console.log(str.toString() === str.valueOf());
</script>
💬留言板0

还没有留言,来发表第一条吧~

PAGE LOAD / LIVEJavaScript toString 方法与判断数据类型加载中