JavaScript高质量代码之类型转换

本文保存一些JavaScript代码的高质量写法,以便查阅和进步。

使用!!和+进行类型判断和转换

javascript是一门弱类型的语言,通常我们在编写javascript代码时往往会用到许多类型转换的东西,对于string,number,boolean等基础类型,==和===是有区别的,对于array,function,object等引用类型,==和===是没有区别的,可以通过javascript的类型转换技巧来实现判断。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function isNumber(a){ 
return a === +a; //判断是否为数字类型
}

var str = "100", num = 100;
console.log(str === num); //false,类型不同

// +可以把字符串强制转化为number型
console.log(typeof(+str)); //number
console.log((+str) === num); //true

// !!可以将任一个对象转化为boolean型
console.log(typeof(!!str)); //boolean
console.log(!!0); //false,数字类型的0,boolean之后为false
console.log(!!"0"); //true,字符串0,boolean之后为true

//那么综合进阶可以判断是否为数字类型的0,或者字符串类型的0
function isZero(a){
return !!(+a) === false;
}
console.log(isZero("0")); //true
console.log(isZero(0)); //true

既然+可以转换成number,那么和全局函数parseInt,parseFloat,Number有什么区别呢?

1
2
3
4
5
var str = "100s";
console.log(+str); //NaN
console.log(Number(str)); //NaN
console.log(parseInt(str)); //100
console.log(parseFloat(str)); //100

感谢您的阅读,有不足之处请在评论为我指出。

参考资料

[1]:underscore.js中文文档

版权声明:本文为博主原创文章,未经博主允许不得转载。本文地址 http://yangyuji.github.io/2015/06/13/javascript-super/