JavaScript中设计了5种简单数据类型Number、String、Boolean、Undefined、Null。和复杂数据类型Object。
ES6新增的Symbol数据类型,Symbol在开发中很少遇到,一般在写类库、或保证对象键不重复,这里不做讨论
特殊类型的值有:
0、NaN、空字符串""、false、undefined、null
这6个值在 Boolean转型函数中,结果均为false。由于程序控制语句 if 自动使用Boolean函数转换为布尔值,因此这6个值非常重要。
一般使用的转型函数:Number()、String()、Boolean():
对于Number函数,用于将其他类型的值转换成Number类型,但转换字符串结果不够合理,大多数情况下,使用parseInt、parseFloat函数替代;
转换规则:
对于String函数,用于将其他类型的值转换成String类型,转换规则如下:
对于Boolean()函数,使用if语句时会自动调用Boolean函数将其转换为布尔值。对于转换结果,只要记住了上述6中特殊值转换结果均为false,其他均为true。
let specialData = [0, NaN, null, undefined, '', false]; let funArray = [Boolean, String, Number]; funArray.forEach(fun => { var tem = {}; specialData.forEach(data => { tem[`${fun.name}( ${data} )`] = fun(data); }); console.table(tem); })
Boolean( 0 ) //false Boolean( NaN ) //false Boolean( null ) //false Boolean( undefined ) //false Boolean( ) //false Boolean( false ) //false
String( 0 ) //0 String( NaN ) //NaN String( null ) //null String( undefined ) //undefined String( ) //<empty string> String( false ) //false
Number( 0 ) //0 Number( NaN ) //NaN Number( null ) //0 Number( undefined ) //NaN Number( ) //0 Number( false ) //0
逻辑非是一个操作符,使用!表示,用于将一个操作数转换为布尔值,由于使用双重逻辑非 与 Boolean函数的转换结果一致,因此,只要记住了以上6种特殊值,很容易得到转换结果。
let specialData = [0, NaN, null, undefined, '', false]; let tem = {}; specialData.forEach(data => { tem[`!!${data}`] = !!(data); }); console.table(tem)
!!0 //false !!NaN //false !!null //false !!undefined //false !! //false !!false //false
逻辑与经常用于判断对象属性是否存在,有助于提高程序健壮性。它遵守以下规则:
总结:
逻辑与在对第一个操作数求值结果为true 的时候,返回第二个操作数;当第一个操作数求值结果为false的时候,返回第一个操作数。
逻辑或经常应用在当个结果为false的时候,提供一个默认值。转换规则如下:
总结:
与逻辑与相反,逻辑或在第一个操作数求值结果为true的时候,返回第一个操作数;当第一个操作数求值结果为false的时候,返回第二个操作数。