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()函数在接收到一个值后,会尝试将这个值转换成数值。 这个方法使用的时候要小心 假如数据是不为空的字符串的话,亦或者是个对象的话 就会混淆 需要留意的是 空字符串,空数组 :
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 内存泄漏,解决内存泄漏又关联到垃圾回收 等等等等。。。。
这方面的总结要看好多资料,怕误导了大家,如果文中有什么错的地方 大家指出来,共同学习!
瞎折腾个公众号,感兴趣的可以关注下,谢谢。