js基本数据类型的七十二变

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隐式转化有很多坑,尽量用===替代==

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容