博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js基本数据类型不妨回头再看看
阅读量:6534 次
发布时间:2019-06-24

本文共 2283 字,大约阅读时间需要 7 分钟。

JS的基本数据类型有哪些呢?

js基本数据类型:
es5中的基本数据类型有:Undefined、Null、Boolean、Number、String、Object。
es6中新加一个数据类型 symbol
检测当前变量的数据类型方法 typeof 基本数据类型对应检测结果:

img_9c02ce697ecfa421e7afa325bc673b5a.png

这里typeof(null) 返回为object 原因是 null被认为是一个空对象引用。

Undefined :类型只有一个值,Undefined 。在使用var 声明变量但未对其加以初始化时,这个变量的值就是Undefined。建议用的时候对变量初始化,避免某个比较坑的问题出现。
Null:类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回object的原因。
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检测null值就可以知道相应的变量是否已经保存了一个对象的引用了。
实际上,undefined值是派生自null值的 当我们在控制台打印输出时会出现

img_b9c2d9f6f22cf599489167f146505d0f.png
尽管null和undefined有这样的关系,但它们的用途完全不同。无论在什么情况下都没有必要把一个变量的值显式地设置为undefined,可是同样的规则对null却不适用。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined。
Boolean
该类型只有两个字面值:true和false。这两个值与数字值不是一回事,因此true不一定等于1,而false也不一定等于0。

虽然Boolean类型的字面值只有两个,但JavaScript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用类型转换函数Boolean(),

img_9cb377ddc7462fac21791e74b569e4d9.png

给大家看下比较有趣的问题:

img_7da5e2412b282c3be72d6fa35d812306.png

对象和布尔进行比较 对象要转换成 字符串 然后再转数字 布尔转数字 进行比较

[]转换为字符串'',然后转换为数字0,true转换为数字1,所以为false。
== 情况下的隐式转换

img_5078b740fb08460dfe8ca598dac8f384.png
如图,任意两种类型比较时,如果不是同一个类型比较的话,则按如图方式进行相应类型转换,如对象和布尔比较的话,对象 => 字符串 => 数值 布尔值 => 数值。
![] !将后面的表达式强制转换成 Boolean类型 然后取反在进行比较 [] 数组也是个对象 Boolean([]) //true 取反为false
img_a6fa623a9dd41ac3854803709d850209.png
有时候我们在处理number类型的时候 比如接口返回的是 空字符串,亦或者在处理运算的时候 除数为零的情况 导致结果为NaN 为了避免这种情况出现,我们可以使用 !!操作符转换成布尔值 (只要变量的值为:0,null, " ", Undefined,NaN)返回的都是false 反之返回 true 这样就省去多余的判断了。
感兴趣的可以看下这些js的小技巧
提到NaN 大家共同学习下吧,下面几个例子看完感觉很崩溃:
img_ad8fdd0cdfef61344141521b87c363c2.png

NaN并不是一个数字,他的类型是一个;

任何数值除以0都会导致错误而终止程序执行。但是在ECMAScript中,会返回出特殊的值,因此不会影响程序的执行。
任何与NaN进行运算的结果均会为NaN,NaN与自身不相等(NaN不与任何值相等)。
ECMAScript提供isNaN()函数,用来判断这个是不是NaN。isNaN()函数在接收到一个值后,会尝试将这个值转换成数值。 这个方法使用的时候要小心 假如数据是不为空的字符串的话,亦或者是个对象的话 就会混淆 需要留意的是 空字符串,空数组 :

console.log(isNaN(1));  //false console.log(isNaN("")) ; //falseconsole.log(isNaN([]));  //falseconsole.log(isNaN([1,2]));  //true

还好es6为我们提供了Number.isNaN() 方法

当传入一个数字参数并调用 Number.isNaN 时,会进行以下几步:1. 如果Type(number) 不是数字, 返回 false.2. 如果数字是NaN, 返回true.3. 其他情况,返回false.

Number.isNaN() 方法返回的结果符合我们的预期,非常的友好(参数真正为NaN时,才会返回true)

console.log(Number.isNaN(NaN));            // trueconsole.log(Number.isNaN('hello'));        // falseconsole.log(Number.isNaN(['x']));          // falseconsole.log(Number.isNaN({}));             // false

先到这吧,后面还有一大推 比如:基本数据类型 对应的 引用类型,引用类型的赋值问题 ,赋值问题又牵扯到 深拷贝,浅拷贝 栈 堆 ; 栈,堆的溢出,又牵扯到 js 内存泄漏,解决内存泄漏又关联到垃圾回收 等等等等。。。。

这方面的总结要看好多资料,怕误导了大家,如果文中有什么错的地方 大家指出来,共同学习!

瞎折腾个公众号,感兴趣的可以关注下,谢谢。

img_db066c3aceb4ee2efeebc2899d2df578.png
个人公众号

转载地址:http://rgzdo.baihongyu.com/

你可能感兴趣的文章
linux 的网络设置
查看>>
首届“欧亚杯”象翻棋全国团体邀请赛圆满收评!
查看>>
编译tomcat
查看>>
oracle-xe手工创建数据库
查看>>
Cisco交换机 链路聚合
查看>>
我的友情链接
查看>>
UG中卸载被占用的DLL
查看>>
eclipse 设置注释模板详解,与导入模板方法介绍总结
查看>>
Cocos2d-x3.2 文字显示
查看>>
估计下星期就能考科目二了
查看>>
轻松实现localStorage本地存储和本地数组存储
查看>>
mongodb group
查看>>
python+selenium自动化测试(二)
查看>>
(笔记 - 纯手敲)Spring的IOC和AOP 含GIT地址
查看>>
7-设计模式介绍
查看>>
让运维更高效:关于ECS系统事件
查看>>
J2EE分布式框架--单点登录集成方案
查看>>
跨域传递参数
查看>>
android 4.2的新特性layoutRtl,让布局自动从右往左显示
查看>>
iOS tableView 下拉列表的设计
查看>>