ECMAScript中可用的3种强制类型转换如下:
Boolean(value): 把给定的值转换成Boolean型
String(value) : 把给定的值转换成字符串
Number(value) : 把给定的值转换成数字(可以是整数或浮点数)
-
Object类型到Boolean类型
// 除了空引用(null)会转换为false,其他都被转换为true var obj = { name:"briup", age:12 }; // 使用Boolean包装器进行转换 console.log(Boolean(obj));
-
Object类型转String类型
var obj = { name: 'zhangsan', age: 12, // 可以重写toString方法,进行我们想要的转换 toString:function(){ return this.name+"--"+this.age; } }; console.log(obj.toString(), typeof obj.toString()); console.log(String(obj), typeof String(obj));
转换规则:
1.先调用对象的toString方法
2.判断该方法的返回值是否为基础数据类型(Number,String,Boolean,Undefined,Null)
3.若返回值为基础数据类型,则转换规则按照相应数据类型的转换规则对其进行转换
4.若返回值不为基础数据类型,则在该返回值的基础上继续调用valueOf方法
5.判断valueOf的返回值是否为基础数据类型,若是基础数据类型则进行操作3,若仍旧不为基础数据类型则报错
-
Object类型转Number类型
var obj = { name:"briup", age:12, /* 1.如果只重写了valueOf()或者toString()方法,则调用该方法,并将返回值用Number()转换。 2.如果两个方法都重写了,则调用valueOf(),并将返回值用Number()转换。 3.如果两个方法都没有重写,则返回NaN */ toString:function(){ return "100"; }, valueOf:function(){ return 10; } }; console.log(Number(obj));
转换规则:
显式转换与隐式转换规则类似,当要将对象转换为Number时,类似隐式转换中的PreferredType为Number
1.先调用对象的valueOf方法
2.判断该方法的返回值是否为基础数据类型(Number,String,Boolean,Undefined,Null)
3.若返回值为基础数据类型,则转换规则按照相应数据类型的转换规则对其进行转换
4.若返回值不为基础数据类型,则在该返回值的基础上继续调用toString方法
5.判断toString的返回值是否为基础数据类型,若是基础数据类型则进行操作3,若仍旧不为基础数据类型则报错