浅析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 相关文章推荐
细品javascript 寻址,闭包,对象模型和相关问题
Apr 27 Javascript
JavaScript Event学习第八章 事件的顺序
Feb 07 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
Jul 13 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
Jan 27 Javascript
深入解析JavaScript中的arguments对象
Jun 12 Javascript
Centos6.8下Node.js安装教程
May 12 Javascript
详解vue跨组件通信的几种方法
Jun 15 Javascript
Node做中转服务器转发接口
Oct 18 Javascript
React props和state属性的具体使用方法
Apr 12 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
Sep 30 Javascript
微信小程序 Storage更新详解
Jul 16 Javascript
layui在form表单页面通过Validform加入简单验证的方法
Sep 06 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中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
php实现编辑和保存文件的方法
2015/07/20 PHP
PHP简单日历实现方法
2016/07/20 PHP
PHP中功能强大却很少使用的函数实例小结
2016/11/10 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
PHP连接sftp并下载文件的方法教程
2018/08/26 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
javascript+mapbar实现地图定位
2010/04/09 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
详解Bootstrap glyphicons字体图标
2016/01/04 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
Python中join和split用法实例
2015/04/14 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
女大学生个人求职信
2013/12/09 职场文书
竞争上岗演讲稿
2014/01/05 职场文书
专题组织生活会方案
2014/06/15 职场文书
求职简历自荐信
2014/06/18 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书