js中的类型转换

132 阅读1分钟

基本类型转数字类型

规则如下:

  • true——》1
  • false——》0
  • null——》0
  • undefined——》NaN
  • string——》1.去掉字符串的引号,如果不是数字返回NaN,如果是数字返回数字,2.若是空字符串,返回0

string转number举例:

Number('    ')//0
Number('11a');//NaN
Number('11');//11
Number('0110');//110,这里前面有0并不会按照八进制方式处理,而是十进制

Number('0o14')//12,可以在0后面添加o达到转成八进制

ES6支持的二,八,十六进制格式:

0b11//3的二进制
0B11

0o14//12的八进制
0O14//这里使用大写的O

0xc//12的十六进制
0Xc

ES6开始的严格模式不支持以0开始的八进制格式,在非严格模式下是支持的。

所有类型转布尔类型

  • null——》false
  • number——》1、0转成false,2、NaN转成false,3.其他数字都是true
  • string——》1、空字符串转成false,2、其他都是true
  • 对象类型——》true
  • undefined——》false

对象类型转成基本类型

规则:先调用valueOf,如果得到的是对象,继续调用toString,如果返回的还不是对象,报错

var obj = {
  valueOf: function () {
    return 1;
  },
  toString: function () {
    return 3;
  },
};
console.log(1 + obj);//2

若注释掉valueOf,保留toString

var obj = {
  //   valueOf: function () {
  //     return 1;
  //   },
  toString: function () {
    return 3;
  },
};

console.log(1 + obj);//4
console.log(obj.valueOf()//{ toString: [Function: toString] }

由于valueOf返回的是一个对象,所以调用toString方法

若toString返回一个对象时,便会报错

var obj = {
  //   valueOf: function () {
  //     return 1;
  //   },
  toString: function () {
    return {};
  },
};

console.log(1 + obj);//报错

基本类型转字符串

  • null——》"null"
  • undefined——》"undefined"
  • number——》加上双引号
  • boolean——》加上双引号