浅析JavaScript中的特殊数据类型


Posted in Javascript onDecember 15, 2017

在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中的特殊数据类型,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
完美解决JS中汉字显示乱码问题(已解决)
Dec 27 Javascript
jquery 图片 上一张 下一张 链接效果(续篇)
Apr 20 Javascript
浅析javascript中function 的 length 属性
May 27 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
Nov 17 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
Jan 28 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
Aug 29 Javascript
jQuery图片查看插件Magnify开发详解
Dec 25 jQuery
angularjs 页面自适应高度的方法
Jan 17 Javascript
webpack热模块替换(HMR)/热更新的方法
Apr 05 Javascript
vue-cli3.0 特性解读
Apr 22 Javascript
Vue项目路由刷新的实现代码
Apr 17 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
Nov 04 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
Dec 15 #Javascript
微信小程序使用request网络请求操作实例
Dec 15 #Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
Dec 15 #Javascript
Angular中管道操作符(|)的使用方法
Dec 15 #Javascript
浅谈Vue SPA 首屏加载优化实践
Dec 15 #Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
Dec 15 #Javascript
Angular2开发环境搭建教程之VS Code
Dec 15 #Javascript
You might like
PHP初学者头疼问题总结
2006/07/08 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
新手入门常用代码集锦
2007/01/11 Javascript
JS解密入门之凭直觉解
2008/06/25 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
Python实现子类调用父类的方法
2014/11/10 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
Python使用post及get方式提交数据的实例
2019/01/24 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
keras slice layer 层实现方式
2020/06/11 Python
容易被忽略的Python内置类型
2020/09/03 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
瑞士最大的图书贸易公司:Orell Füssli
2019/12/28 全球购物
应届毕业生自我鉴定范文
2013/12/27 职场文书
协议书怎么写
2014/04/21 职场文书
信用卡催款律师函
2015/05/27 职场文书
使用CSS实现黑白格背景效果
2022/06/01 HTML / CSS