您的位置:首页 > Web前端 > JavaScript

JavaScript深入理解之强制类型转换

2017-01-06 10:55 316 查看

JavaScript深入理解之强制类型转换

* 在我们写代码中,常常会遇见需要进行类型转换的时候,有时是对函数参数进行类型转换,有时是对函数返回值进行类型转换,下面来聊一聊JS里面的类型转换,JS里面的类型转换分为两种,一种是显示强制类型转换,一种是隐式强制类型转换。 *

let a = 9;

let b = a + '';     // 隐式强制类型转换
let c = String(a);  // 显示强制类型转换


* 将非字符串(数字、数组、JSON格式)转换为字符串—–toString() *

let a = 9.99 * 10000000000 * 10000000000000000000000;

let aa = a.toString();
console.dir(aa);        // => '9.99e+32'

let b = [1, 2, 3];

let bb = b.toString();
console.dir(bb);        // => '1,2,3'

let c = {
a: 1,
b: 2
}

let cc = JSON.stringify(c);
console.dir(cc);        // => '{"a":1, "b":2}'


* 将非数字类转换为数字—– Number() *

let a = '42';
let aa = Number(a);

console.dir(aa);        // =>42

Number(true);           // 1
Number(false);          // 0
Number(undefined);      // NaN
Number(null);           // 0


* 将非布尔值转换为布尔值—–Boolean() *

Boolean(something);

当something为 undefined、null、false、+0、-0、NaN、''六个值时返回false,
其它时候返回true


* 将字符串转换为数字—- +或- *

let c = "123";
let d = +c;
console.dir(d)  // => 123

let a = -c;     // -会反转数值符号位
console.dir(a)  // => -123

let e = - -c;
console.dir(e); // => 123


* 解析数字字符串—– parseInt()、parseFloat() *

let a = '123fd';
let aa = parseInt(a);
console.log(aa);        // => 123

let b = '123.4fd';

let bb = parseInt(b);
let bbb = parseFloat(b);

console.dir(bb);        // => 123
console.dir(bbb);       // => 123.4


* 其它情况 *

'123' + 5       // => '1235'
'123' - 1       // => 122
[1,2] + 4       // => '1,24'
[1,2] - 4       // => NaN
[1] - 4         // => -3
[1,2] + [4,5]   // => '1,24,5'


* && 和 || *

在JavaScript语言中,&&和||返回两个操作数其中一个的值,在C和PHP中返回的是true或false

42 || 'abc'    // 42
42 && 'abc'    // 'abc'

null || 'abc'  // 'abc'
null && 'abc'  // null


||和&&首先会对第一个操作数进行判断,如果不是布尔值,先进行强制类型转换为布尔值

对于||,如果第一个操作数转换的布尔值为true,返回第一个操作数,否则返回第二个操作符

对于&&,如果第一个操作数转换的布尔值为true,返回第二个操作数,否则返回第一个操作符

* == 和 === *

对于==和===的区别,常见的解释是“==检查值是否相等,===检查值和类型是否相等”,个人感觉这个解释比较表面,但能说明==和===的区别,深层次的解释是“==允许在相等比较中进行强制类型转换,而===不允许在相等比较中进行类型转换”,在进行开发时,不建议使用==,如果需要进行比较和类型转换,建议先转换后在进行比较。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息