在JavaScript中,有6大数据类型,分别包括string,number,boolean,undefined,null 和 object
一、JS中的特殊类型:NaN
NaN 即Not a Number , 不是一个数字, 那么NaN到底是什么呢? 而对于JS来说,整数和浮点数都统称为number 类型,除此之外,number 类型还有一个很特殊的值,即NaN,它是用来表示是否属于number 类型的一种状态,而不是一个确切的值(所以,NaN不等于自身)。
那么,NaN值一般会在什么情况下出现呢?
一般有两种情况:
(1) 一个表达式中如果有 减号(-)、乘号(*) 或 除号(/) 等运算符 时,JS引擎会在计算之前试图将运算符两边的变量转化为number类型(使用Number(x)做转化),如果转化失败,表达式将返回NaN;有 加号(+)运算符 不会将其两边的变量转化为number类型,这是因为JS表达式的执行顺序是按照运算符的优先级从左到右依次进行的,如果加号(+) 两边的变量都是number类型时,才会做数字相加运算,如果其中有一个变量是字符串,则会将两边都作为字符串相加,如: 5+4+"6"="96"
(2) 直接使用 parseInt,parseFloat 或 Number 将一个非数字的值转化为数字时,表达式返回 NaN
"abc" - 3 // NaN parseInt( "abc" ) // NaN parseFloat( "abc" ) //NaN Number( "abc" ) //NaN
对于数字+字符的值,其转化结果会有所不同:
Number( "123abc" ); //NaN parseInt( "123abc" ); //123 parseInt( "123abc45" ); //123 parseFloat( "123.45abc" ); //123.45
这是因为Number转化的整个值,而不是部分值,parseInt 和 parseFloat 只转化第一个无效字符之前的字符串。
因此,当一个字符串不能被Number,parseInt,parseFloat成功转换时,就返回NaN,表示该字符串无法被识别为数字类型,这是一个异常状态,并不是一个确切的值。
所以 NaN != NaN , 因为它是一个异常状态,而不是一个确切的值。
另外,与NaN相关的还有一个函数,即 isNaN() , 它的作用是检查一个字符串是否能被 Number() 成功转换,即强制转化整个字符串。
isNaN( "123" ) //false 能转换 isNaN( "abc" ) //true 不能转换 isNaN( "123abc" ) //true 部分可转换,但整体不能转换 isNaN( "123.45abc" ) //true 部分可转换,但整体不能转换
二、JS中还有另外两个特殊类型:undeinfed 和 null
undefined 是JavaScript 6种数据类型中的一种,该类型只有一个值,也就是undefined。 undefined意为`未定义`,即当使用var声明了变量但未进行赋值时,这个变量的值就是undefined,其产生的原因有两种:
(1)访问对象不存在的属性或方法
(2)声明了变量但从未赋值
var v1,obj = {}; console.log(v1); //undefined console.log(obj. get ); //undefined typeof v1; // "undefined" typeof v2; // "undefined" typeof obj. get ; // "undefine" typeof obj ; // "object"
和NaN不同的是,undefined虽然也代表变量的一个状态,但这个状态值是确定唯一的,即当一个变量声明了但没有赋值时,它的状态就是undefined ,因此下面表达式是成立的:
var b; b == undefined; //true
理解了undefined 以后,再理解null 就容易多了,null类型也只有一个值:null , 表示一个变量中没有包含有效数据。null在这里意为空值、空对象的意思,更确切的说,一个被赋值为null的变量没有保存有效的数值、字符串、布尔、数组或对象等,可以通过给一个变量赋值为null来清空变量中的内容。产生null的原因只有一个:即对一个变量显式的赋值为null 。
var p = null ; console.log(p); //null typeof p ; // "object" typeof null ; // "object"
还是和NaN来比较,null 也是一个确定切唯一的状态值,当一个变量被赋值为null时,那么它就和null相等,因此下面表达式也是成立的:
var obj = null ; obj == null ; //true
另外:
var v1 = null; var v2; console.log(v1 + 1 ); // 1 console.log(v2 + 1 ); //NaN var i = i +1; var j = i+ 1; console.log(i); // NaN console.log(j ); //NaN console.log(i == j ); //false
总结
以上所述是小编给大家介绍的JavaScript中的特殊数据类型,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】