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

简介: JS的基本数据类型有哪些呢?js基本数据类型:es5中的基本数据类型有:Undefined、Null、Boolean、Number、String、Object。

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的小技巧 http://web.jobbole.com/86146/
提到NaN 大家共同学习下吧,下面几个例子看完感觉很崩溃:
img_ad8fdd0cdfef61344141521b87c363c2.png

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

console.log(isNaN(1));  //false 
console.log(isNaN("")) ; //false
console.log(isNaN([]));  //false
console.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));            // true
console.log(Number.isNaN('hello'));        // false
console.log(Number.isNaN(['x']));          // false
console.log(Number.isNaN({}));             // false

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

这方面的总结要看好多资料,怕误导了大家,如果文中有什么错的地方 大家指出来,共同学习!
瞎折腾个公众号,感兴趣的可以关注下,谢谢。


img_db066c3aceb4ee2efeebc2899d2df578.png
个人公众号
目录
相关文章
|
7天前
|
JavaScript
JS 获取对象数据类型的键值对的键与值
JS 获取对象数据类型的键值对的键与值
|
1月前
|
JavaScript 前端开发
JavaScript 中有哪些数据类型?
JavaScript 中有哪些数据类型?
18 3
|
1月前
|
JavaScript
JS常用数据类型转换
JS常用数据类型转换
13 1
|
1月前
|
存储 JavaScript 前端开发
javascript的8中数据类型
javascript的8中数据类型
|
1月前
|
JavaScript 前端开发 开发者
编程笔记 html5&css&js 071 JavaScript Symbol 数据类型
编程笔记 html5&css&js 071 JavaScript Symbol 数据类型
|
2天前
|
存储 JavaScript 前端开发
JavaScript的引用数据类型主要包括对象
【4月更文挑战第16天】JavaScript的引用数据类型主要包括对象
9 4
|
1月前
|
JavaScript
|
1月前
|
JSON JavaScript 前端开发
js如何正确判断数据类型
js如何正确判断数据类型
23 0
|
1月前
|
JavaScript 前端开发 API
javascript中的数据类型
javascript中的数据类型
|
1月前
|
JavaScript 前端开发 Java
编程笔记 html5&css&js 073 JavaScript Object数据类型
编程笔记 html5&css&js 073 JavaScript Object数据类型