js中的数据类型转换

数据类型转换

字符串转数字

var str1 = '123';
var str2 = '123.456';
var str3 = '123abc';
var str4 = 'abc123';
console.log(str1 + ' --- ' + typeof str1);  // => 123 --- string

console.log('-----+-----');
var a1 = str1 + 0;
console.log(a1 + ' --- ' + typeof a1);  // => 1230 --- string

console.log('-----------');
var b1 = str1 - 0;
var b2 = str2 - 0;
var b3 = str3 - 0;
var b4 = str4 - 0;
console.log(b1 + ' --- ' + typeof b1);  // => 123 --- number
console.log(b2 + ' --- ' + typeof b2);  // => 123.456 --- number
console.log(b3 + ' --- ' + typeof b3);  // => NaN --- number
console.log(b4 + ' --- ' + typeof b4);  // => NaN --- number

console.log('-----*-----');
var c1 = str1 * 1;
var c2 = str2 * 1;
var c3 = str3 * 1;
var c4 = str4 * 1;
console.log(c1 + ' --- ' + typeof c1);  // => 123 --- number
console.log(c2 + ' --- ' + typeof c2);  // => 123.456 --- number
console.log(c3 + ' --- ' + typeof c3);  // => NaN --- number
console.log(c4 + ' --- ' + typeof c4);  // => NaN --- number

console.log('-----/-----');
var d1 = str1 / 1;
var d2 = str2 / 1;
var d3 = str3 / 1;
var d4 = str4 / 1;
console.log(d1 + ' --- ' + typeof d1);  // => 123 --- number
console.log(d2 + ' --- ' + typeof d2);  // => 123.456 --- number
console.log(d3 + ' --- ' + typeof d3);  // => NaN --- number
console.log(d4 + ' --- ' + typeof d4);  // => NaN --- number

console.log('-----%-----');
var h1 = str1 % 1;
var h2 = str2 % 1;
var h3 = str3 % 1;
var h4 = str4 % 1;
console.log(h1 + ' --- ' + typeof h1);  // => 0 --- number
console.log(h2 + ' --- ' + typeof h2);  // => 0.45600000000000307 
--- number
console.log(h3 + ' --- ' + typeof h3);  // => NaN --- number
console.log(h4 + ' --- ' + typeof h4);  // => NaN --- number

console.log('-----Number-----');
var e1 = Number(str1);
var e2 = Number(str2);
var e3 = Number(str3);
var e4 = Number(str4);
console.log(e1 + ' --- ' + typeof e1);  // => 123 --- number
console.log(e2 + ' --- ' + typeof e2);  // => 123.456 --- number
console.log(e3 + ' --- ' + typeof e3);  // => NaN --- number
console.log(e4 + ' --- ' + typeof e4);  // => NaN --- number

console.log('-----parseInt-----');
var f1 = parseInt(str1);
var f2 = parseInt(str2);
var f3 = parseInt(str3);
var f4 = parseInt(str4);
console.log(f1 + ' --- ' + typeof f1);  // => 123 --- number
console.log(f2 + ' --- ' + typeof f2);  // => 123 --- number
console.log(f3 + ' --- ' + typeof f3);  // => 123 --- number
console.log(f4 + ' --- ' + typeof f4);  // => NaN --- number

console.log('-----parseFloat-----');
var g1 = parseFloat(str1);
var g2 = parseFloat(str2);
var g3 = parseFloat(str3);
var g4 = parseFloat(str4);
console.log(g1 + ' --- ' + typeof g1);  // => 123 --- number
console.log(g2 + ' --- ' + typeof g2);  // => 123.456 --- number
console.log(g3 + ' --- ' + typeof g3);  // => 123 --- number
console.log(g4 + ' --- ' + typeof g4);  // => NaN --- number

conclusion:

  • 在js中遇到 -*/% 操作符时

    js引擎会尝试着先将操作符两边的数据转换成number类型

    如果成功则进行相应的操作,如果不成功则NaN

  • 在使用Number函数进行字符串强制转换数字类型时

    无论是整数还是小数类型的字符串都会转换成相应的number类型

    字符串中含有除小数点之外的非数字字符时NaN

  • parseIntparseFloat方法可以强制转换数字类型的字符串

    而且可以转换数字+字母("123abc")类型的字符串

    不过遇到字母+数字("abc123")就会NaN


数字转字符串

var num = 123.456;
var arr = [1, 2, 3];
console.log(num + '---' + typeof num);  // => 123.456---number
console.log(arr + '---' + typeof arr);  // => 1,2,3---object
console.log('------');

var a1 = num + '';
var a2 = num - '';
var a3 = arr + '';
var a4 = arr - '';
console.log(a1 + '---' + typeof a1);  // => 123.456---string
console.log(a2 + '---' + typeof a2);  // => 123.456---number
console.log(a3 + '---' + typeof a3);  // => 1,2,3---string
console.log(a4 + '---' + typeof a4);  // => NaN---number
console.log('------');

var b1 = String(num);
var b2 = String(arr);
console.log(b1 + '---' + typeof b1);  // => 123.456---string
console.log(b2 + '---' + typeof b2);  // => 1,2,3---string
console.log('------');

var c1 = num.toString();
var c2 = arr.toString();
console.log(c1 + '---' + typeof c1);  // => 123.456---string
console.log(c2 + '---' + typeof c2);  // => 1,2,3---string

conclusion:

  • 当一个数字类型的数据和空('')字符串进行加(+)运算时

    会自动转换成string类型

  • 构造函数String可以实现字符串的转换

    在进行对象转换时其实调用了toString方法

  • toString可以进行字符串转换


数字和字符转换布尔类型

var a = 123;
var b = '123';
var c = 'abc';
var d = null;
var e = 0;
var f = undefined;
var g = [];
var h = {};
var i = c - 1;
var j = '';
var k = '0';
console.log(i);  // => NaN

var a1 = !!a;
var b1 = !!b;
var c1 = !!c;
var d1 = !!d;
var e1 = !!e;
var f1 = !!f;
var g1 = !!g;
var h1 = !!h;
var i1 = !!i;
var j1 = !!j;
var k1 = !!k;
console.log(a1 + '---' + typeof a1);  // => true---boolean
console.log(b1 + '---' + typeof b1);  // => true---boolean
console.log(c1 + '---' + typeof c1);  // => true---boolean
console.log(d1 + '---' + typeof d1);  // => false---boolean
console.log(e1 + '---' + typeof e1);  // => false---boolean
console.log(f1 + '---' + typeof f1);  // => false---boolean
console.log(g1 + '---' + typeof g1);  // => true---boolean
console.log(h1 + '---' + typeof h1);  // => true---boolean
console.log(i1 + '---' + typeof i1);  // => false---boolean
console.log(j1 + '---' + typeof j1);  // => false---boolean
console.log(k1 + '---' + typeof k1);  // => true---boolean
console.log('------');

var a2 = Boolean(a);
var b2 = Boolean(b);
var c2 = Boolean(c);
var d2 = Boolean(d);
var e2 = Boolean(e);
var f2 = Boolean(f);
var g2 = Boolean(g);
var h2 = Boolean(h);
var i2 = Boolean(i);
var j2 = Boolean(j);
var k2 = Boolean(k);
console.log(a2 + '---' + typeof a2);  // => true---boolean
console.log(b2 + '---' + typeof b2);  // => true---boolean
console.log(c2 + '---' + typeof c2);  // => true---boolean
console.log(d2 + '---' + typeof d2);  // => false---boolean
console.log(e2 + '---' + typeof e2);  // => false---boolean
console.log(f2 + '---' + typeof f2);  // => false---boolean
console.log(g2 + '---' + typeof g2);  // => true---boolean
console.log(h2 + '---' + typeof h2);  // => true---boolean
console.log(i2 + '---' + typeof i2);  // => false---boolean
console.log(j2 + '---' + typeof j2);  // => false---boolean
console.log(k2 + '---' + typeof k2);  // => true---boolean
console.log('------');

conclusion:

  • 可以使用运算符进行隐式转换(!!

    也可以通过构造函数强制转换

  • null、数字0undefined、空字符串''NaN 转换成false


布尔值转数字或字符串

var bool1 = true;
var bool2 = false;
console.log(bool1+'---'+typeof bool1);  // => true---boolean

var n1 = bool1.toString();
var n2 = bool2.toString();
console.log(n1+'---'+typeof n1);        // => true---string
console.log(n2+'---'+typeof n2);        // => false---string
console.log('------');

var m1 = bool1 + '';
var m2 = bool2 + '';
console.log(m1 +'---'+typeof m1);       // => true---string     
console.log(m2 +'---'+typeof m2);       // => false---string 
console.log('------');

var s1 = bool1 - 0;
var s2 = bool2 - 0;
console.log(s1 + '---' + typeof s1);    // => 1---number   
console.log(s2 + '---' + typeof s2);    // => 0---number
console.log('------');

var q1 = bool1 - '';
var q2 = bool2 - '';
console.log(q1 + '---' + typeof q1);    // => 1---number
console.log(q2 + '---' + typeof q2);    // => 0---number
console.log('------');

var w1 = bool1 * 1;
var w2 = bool1 / 1;
console.log(w1 + '---' + typeof w1);    // => 1---number
console.log(w2 + '---' + typeof w2);    // => 1---number
console.log('------');

var z1 = bool1 + 0;
console.log(z1 + '---' + typeof z1);    // => 1---number

conclusion:

  • booleannumber

    true转换成 1

    false 转换成 0

  • booleanstring

    true转换成'true'字符串

    false转换成字符串'false'

  • 在进行隐式转换时,在和字符串进行+运算时转换成 string类型

    在和数字进行+运算时转换成 number类型

  • 在进行-*/运算时转换成number类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值