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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容