js中数据类型分为两种,第一种基本的数据类型:Number,String,Boolean,Null,Undefiend;
第二种是复杂的数据类型,统称object(引用类型)。
简单说一下基本数据类型,不详细介绍了
js中的number
JavaScript不区分整数和浮点数,统一用Number表示,例如:
1 //整数1
3.1415926 //小数
-12312 //负数
1.23798e12 //科学计数法
特殊的number类型
NaN //NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity
js中的string
"sdadasd" //字符串sdadasfd,用单引号或者双引号包裹起来
js中的boolean
true //true,正确
false //false , 错误
js中的null和undifined
null //空值
undifined //未定义
下面介绍一下强制类型转换
Number(obj) // 把obj转化为number,如果没办法转为number,则返回NaN,parseInt()和parseFloat()也是这样,下文有详细介绍
toString(obj) // 把obj转化为字符串
Boolean(obj) //把obj转化为布尔值
转换规则
Boolean(undefined):false
Number(undefined):NaN
String(undefined):'undefined'
Boolean(null):false
Number(null):0
String(null):'null'
Number(true): 1 || Number(false) : 0
String(true):'true' || String(false):'false'
Boolean(undefined):false
Boolean(null):false
Boolean(非空对象包括空数组[]和空对象{}):true
Boolean(非0): true || Boolean(0和NaN):false
Boolean(非空包括空格字符串):true || Boolean(''):false
Number(true):1 || Number(false):0
Number(各种进制的数字):运算后的十进制的数字,如1.0或1.或01会以1输出
Number(undefined):NaN
Number(null):0
Number(字符串):
Number(只包含数字的十进制和十六进制的字符串):运算后的十进制的数字
[注意]字符串中不识别八进制,按照十进制数字处理
Number(''和' '):0
Number(其他情况的字符串):NaN
Number(对象):
Number([]和[0]和[-0]):0
Number([数字]):运算后的数字
Number([1,2]和{}和其他对象):NaN
下面看一些表达式计算结果
3>2 //false
'2'!==2 //false
'2'!===2 //true
Infinity==Infinity //true
NaN==NaN //false
null==undefined //true
null===undefined //false
1==true //true
1===true //false
'1'==true //true
'1'===true //false
js中的运算
js中的运算符优先级
运算符 说明
.[ ] ( ) 字段访问、数组索引、函数调用和表达式分组
++ — – ~ ! delete new typeof void一元运算符、返回数据类型、对象创建、未定义的值
* / % 相乘、相除、求余数
+ – + 相加、相减、字符串串联
<< >> >>> 移位
< <= > >= instanceof 小于、小于或等于、大于、大于或等于、是否为特定类的实例
== != === !== 相等、不相等、全等,不全等
& 按位“与”
^ 按位“异或”
| 按位“或”
&& 逻辑“与”
|| 逻辑“或”
?: 条件运算
= OP= 赋值、赋值运算(如 += 和 &=)
, 多个计算
js中的隐式转换
console.log("-------以下乘法---------");
console.log(5*"5");//25
console.log(5*"a");//nan
console.log(5*NaN);//nan
console.log(5*null);//0
console.log(5*undefined);//nan
console.log(5*5);//25
console.log("-------以上乘法---------");
// 1、如果2个数值都是数字,那么直接进行乘法运算,(相信大家都会的,和小学数学一样,同时要注意数字的符号),如果乘积数值超过了ECMAscript的数值表示范围,则返回Infinity(正无穷)或者-Infinity(负无穷)
// 2、如果一个数是NaN,那么结果就是NaN
// 3、如果Infinity与0相乘,结果是NaN
// 4、假如一个操作符是数字,另外一个不是数值,那么先用Number()函数,将其进行转化,将转化出来的值与数字进行相乘。假如转换出来的结果出现NaN,那么结果就是NaN。
//除法
console.log("-------以下除法---------");
console.log(5/"5");//1
console.log(5/"a");//nan
console.log(5/NaN);//nan
console.log(5/null);//in
console.log(null/5);//0
console.log(5/undefined);//nan
console.log(5/5);//1
console.log(5/0);//in
console.log(0/5);//0
console.log(0/0);//nan
console.log("-------以上除法---------");
// 和乘法类似,唯一多的一条就是0/0结果是NaN
//取余、求模
console.log("-------以下取余、求模--------");
console.log(16%"5");//1
console.log(5%"a");//nan
console.log(5%NaN);//nan
console.log(5%null);//nan
console.log(null%5);//0
console.log(5%undefined);//nan
console.log(5%5);//0
console.log(5%0);//nan
console.log(0%5);//0
console.log(0%0);//nan
console.log("-------以上取余、求模---------");
// 1、被除数是无穷大,除数是有限大的值,那么结果是NaN
// 2、被除数是有限大的值,除数是0,那么结果是NaN
// 3、Infinity%Infinity结果是NaN
// 4、被除数是有限大的值,除数是无穷大的值,结果是被除数。
// 5、被除数是0,结果是0
//加法
console.log("-------以下加法--------");
console.log(16+"5");//165
console.log(5+"a");//5a
console.log(5+NaN);//nan
console.log("5"+null);//
console.log(5+undefined);//nan
console.log(5+5);//10
console.log("两个数的和是"+5+5);//55
console.log("两个数的和是"+(5+5));//10
console.log("-------以上加法--------");
// 1、有一个是字符串,那么另外一个也会转换为字符串进行拼接。假如一个是字符串,另外一个是null或者undefined,那么相加,null或者undefined就会调用String()方法,获得字符串“null”或者“undefined”,然后进行拼接。
// 2、假如一个数字加null或者undefined,那么还是把null或者undefined进行Number()转换之后再相加。
// 3、剩下的原则和其他的差不多,就不多说了。
//减法
console.log("-------以下减法--------");
console.log(16-"5");//11
console.log(typeof 16-"5");
console.log(5-"a");//nan
console.log(5-NaN);//nan
console.log(5-null);//5
console.log(5-undefined);//nan
console.log(5-5);//0
console.log(5-true);//4
console.log(5-"true");//nan
console.log(5-"");//5
//alert(Number('sds'));nan
// alert(Number(''));//0
console.log("两个数的差是"+5-5);//nan
console.log("两个数的差是"+(5-5));//shi0
console.log("-------以上减法--------");
// 1、Infinity-Infinity结果是NaN
// 2、-Infinity-Infinity结果是-Infinity
// 3、一个数字减Infinity结果是-Infinity
// 4、Infinity-(-Infinity)结果是Infinity
// 5、如果操作数是对象,则调用对象valueOf方法,如果结果是NaN那么结果就是NaN。如果没有valueOf方法,那么调用toString()方法,并将得到的字符串转换为数值。
总结
js隐式转化有很多坑,尽量用===替代==