Number
- Number数字类型包括常规数字和NaN
- NaN (not a number) :不是一个数,但它率属于数字类型
NaN和任何值(包括自己都不相等)NaN!=NaN ,所以我们不能用相等的方式判断是否为有效数字
- isNaN:检测一个值是否为非有效数字,如果不是有效数字返回true,反之是有效数字返回false
console.log(isNaN('123')) //false
console.log(isNaN('AA')) //true
console.log(isNaN(10)) //false
- 将其他值转化为数字类型
1.Number(val)
把字符串转换为数字,只要字符串中包含任意一个非有效数字字符(第一个点除外)结果都是NaN,空字符串会变为数字零
null->0 undefined->NaN
/把引用数据类型转换为数字,是先把他基于toString方法转换为字符串,然后在转换为数字
console.log(Number('12.5')); //=>12.5 console.log(Number('12.5px')); //=>NaN console.log(Number('12.5.5')); //=>NaN console.log(Number('')); //=>0
console.log(Number(true)); //=>1
console.log(Number(false)); //=>0
console.log(isNaN(false)); //=>false
console.log(Number(null)); //=>0
console.log(Number(undefined)); //=>NaN
// 把引用数据类型转换为数字,是先把他基于toString方法转换为字符串,然后在转换为数字
console.log(Number({name:'10'}));//=>NaN
console.log(Number({}));//=>NaN
// {}/{xxx:'xxx'} .toString() => "[object Object]" => NaN
console.log(Number([]));//=>0
// [].toString() -> ''
console.log(Number([12]));//=>12
// [12].toString() -> '12'
console.log(Number([12,23]));//=>NaN
// [12,23].toString() -> '12,23'
let str = '12.5px';
console.log(Number(str)); //=>NaN
console.log(parseInt(str)); //=>12
console.log(parseFloat(str)); //=>12.5
console.log(parseFloat('12.5px')); //=>NaN
2.parseInt/parseFloat(val,进制)
专门用于字符串转化成数值,对于字符串来说,它是从左到右依次查找有效数字字符,直到遇到非有效数字字符,停止查找(不管后面是否还有数字,都不再找了,把找到的当成数字返回。
console.log(parseInt('a123')) //NaN console.log(parseInt('123a')) //123
String
所有用单引号、双引号、反引号(撇 ES6模板字符串)包起来的都是字符串,字符串一旦创建就不可修改
- val.toString()
let a = 12; console.log(a.toString()); //=>'12' console.log((NaN).toString()); //=>'NaN'
// null和undefined是禁止直接toString的 // (null).toString() //=>报错 // 但是和undefined一样转换为字符串的结果就是 'null'/'undefined'
// 普通对象.toString()的结果是 "[object Object]" =>? =>Object.prototype.toString方法不是转换为字符串的,而是用来检测数据类型的
- 字符串拼接:四则运算法则中,除加法之外,其余都是数学计算,只有加法可能存在字符串拼接(一旦遇到字符串,则不是数学运算,而是字符串拼接)
console.log('10' + 10); //=>'1010' console.log('10' - 10); //=>0 console.log('10px' - 10); //=>NaN
let a = 10 + null + true + [] + undefined + '珠峰' + null + [] + 10 + false; /* * 10 + null -> 10 + 0 -> 10 * 10 + true -> 10 + 1 -> 11 * 11 + [] -> 11 + '' -> '11' 空数组变为数字,先要经历变为空字符串,遇到字符串,啥都别想了,直接变为字符串拼接 * '11' + undefined -> '11undefined' * ... * '11undefined珠峰null10false' */
Boolean
Boolean:只有两个值 true/false
- 把其它类型值转换为布尔类型
只有 0、NaN、''、null、undefined 五个值转换为FALSE,其余都转换为TRUE(而且没有任何的特殊情况)
Boolean(val)
console.log(Boolean(0)); console.log(Boolean('')); console.log(Boolean(' ')); console.log(Boolean(null)); console.log(Boolean(undefined)); console.log(Boolean([])); console.log(Boolean([12])); console.log(Boolean(-1));
!/!!
!:取反(先转为布尔,然后取反)
!!:取反再取反,只相当于转换为布尔 <=> Boolean
/* console.log(!1); //=>FALSE console.log(!!1); //=>true */
条件判断
// 如果条件只是一个值,不是==/===/!=/>= 等这些比较,是要把这个值先转换为布尔类型,然后验证真假
if (1) { console.log('哈哈'); } if ('3px' + 3) { //=>'3px3' console.log('呵呵'); } if ('3px' - 3) { //=>NaN-3=>NaN console.log('嘿嘿'); }
null / undefined
null和undefined都代表的是没有
null:意料之中(一般都是开始不知道值,我们手动先设置为null,后期再给予赋值操作)
let num = null; //=>let num = 0; 一般最好用null作为初始的空值,因为零不是空值,他在栈内存中有自己的存储空间(占了位置)
num = 12;
undefined:意料之外(不是我能决定的)
let num; //=>创建一个变量没有赋值,默认值是undefined
num = 12;
object类型
每一object实例都具有以下属性和方法
- constructor
- hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在;例如:o.hasOwnProperty("name")
- isPrototypeOf(Object):用于检查传入的对象是否是传入对象的原型
- toLocalString()
- toString():返回对象的字符串表示
let n ={name:'123',id:'123'};
console.log(n.toLocaleString())//=>[object Object]
console.log(n.toString()) //=>[object Object]
- valueOf():返回值与toString()一样