js--对象(Object)类型数据的显式转换

之前给大家分享了JavaScript数据类型的显式转换,当时没有特地的抽出一个类型来详细举例说明,今天就通过对象类型的数据的显示转换来填补这个空缺

一、Object--->Boolean

首先还是对象类型数据转Boolean类型数据,话不多说,直接上代码

obj = {
  age: 12,
};
console.log(Boolean(obj));  //true

//只有对象的值为null的时候才会转化为false 其他所有的对象都会转化为true
obj1 = null;
console.log(Boolean(obj1));  //false

//注意null与空对象的区别
//null表示对象既没有在栈中存储数据引用地址,也没有在堆中的引用地址中存储数据
//空对象表示对象在栈中有存储数据的引用地址,但是堆中的引用地址中的数据为空
obj2 = {};
console.log(Boolean(obj2));  //true

关于引用类型数据存储方式请看:JavaScript数据存储方式之深拷贝与浅拷贝_买玫瑰可以吗的博客-CSDN博客

二、Object--->Number

之前在JavaScript的数据类型的显示转换中提到我们一般不会将引用数据类型转换为Number类型,因为没有实际意义,通过Number包装器转化出来的引用数据类型,结果都会转化为NaN(非数字),那么,我们如何手动的将引用数据类型转为我们想要的Number类型呢?

下面是转化的步骤:

1.先调用对象的valueOf方法 (此时可以重写valueOf方法)

2.判断该方法的返回值类型

3.如果返回值不为原始值(也就是基础数据类型),则调用toString方法 (此时可以重写toString方法,如果也重写了valueOf方法,则先调用valueOf方法)

4.判断该方法的返回值类型

5.若仍旧不为基础数据类型则报错

var obj = {
  name:'lisi',
  age: 18,
  // 重写toString方法
  toString:function () {
    return '100'
  },
  // 重写valueOf方法
  valueOf: function () {
    return 10
  }
}
console.log(Number(obj)); //10

三、Object--->String

下面是转化的步骤:

1.先调用对象的toString方法 (此时可以重写toString方法)

2.判断该方法的返回值类型(注意:即使不重写toString方法,toString方法返回的也是原始值,所以步骤不可能到3

3.如果返回值不为原始值,则调用valueOf方法

4.判断该方法的返回值类型

5.若仍旧不为基础数据类型则报错

var obj = {
  name: "lisi",
  age: 18,
  // 重写toString方法
  toString: function () {
    return this.name + "-" + this.age;
  },
};
console.log(obj.toString());  //lisi-18




var obj = {
  name: "lisi",
  age: 18,
  // 重写valueOf方法
  valueOf: function () {
    return this.name + "-" + this.age;
  },
};
console.log(obj.toString());  //[object Object]

 由以上三种对象类型转为其他类型的例子来看,数据类型的显式转换其实也是一种强制转换,基础数据类型通过包装器来转换,而引用数据类型需要重写方法来将数据转化为我们想要的数据。

你可能感兴趣的:(前端,javascript,ecmascript)