首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js基本数据类型不妨回头再看看

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

js基本数据类型:

es5中的基本数据类型有:Undefined、Null、Boolean、Number、String、Object。

es6中新加一个数据类型 symbol

检测当前变量的数据类型方法 typeof 基本数据类型对应检测结果:

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

Undefined :类型只有一个值,Undefined 。在使用var 声明变量但未对其加以初始化时,这个变量的值就是Undefined。建议用的时候对变量初始化,避免某个比较坑的问题出现。

Null:类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回object的原因。

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检测null值就可以知道相应的变量是否已经保存了一个对象的引用了。

实际上,undefined值是派生自null值的 当我们在控制台打印输出时会出现

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

Boolean

该类型只有两个字面值:true和false。这两个值与数字值不是一回事,因此true不一定等于1,而false也不一定等于0。

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

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

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

[]转换为字符串'',然后转换为数字0,true转换为数字1,所以为false。

== 情况下的隐式转换

如图,任意两种类型比较时,如果不是同一个类型比较的话,则按如图方式进行相应类型转换,如对象和布尔比较的话,对象 => 字符串 => 数值 布尔值 => 数值。

![] !将后面的表达式强制转换成 Boolean类型 然后取反在进行比较 [] 数组也是个对象 Boolean([]) //true 取反为false

有时候我们在处理number类型的时候 比如接口返回的是 空字符串,亦或者在处理运算的时候 除数为零的情况 导致结果为NaN 为了避免这种情况出现,我们可以使用 !!操作符转换成布尔值 (只要变量的值为:0,null, " ", Undefined,NaN)返回的都是false 反之返回 true 这样就省去多余的判断了。

感兴趣的可以看下这些js的小技巧http://web.jobbole.com/86146/

提到NaN 大家共同学习下吧,下面几个例子看完感觉很崩溃:

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

任何数值除以0都会导致错误而终止程序执行。但是在ECMAScript中,会返回出特殊的值,因此不会影响程序的执行。

任何与NaN进行运算的结果均会为NaN,NaN与自身不相等(NaN不与任何值相等)。

ECMAScript提供isNaN()函数,用来判断这个是不是NaN。isNaN()函数在接收到一个值后,会尝试将这个值转换成数值。 这个方法使用的时候要小心 假如数据是不为空的字符串的话,亦或者是个对象的话 就会混淆 需要留意的是 空字符串,空数组 :

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

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

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

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

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

个人公众号

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180526G0NAZZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券