JS中的数据类型
javascript
本篇博客的主题是JS数据类型,我结合了阮一峰JS教程总结出了一些问题,方便本身往后的复习与总结。JavaScript语言中共有七种数据类型,分别是:java
0.1+0.2=?
这不只仅是学习JS要注意的坑,实际上学习任何编程语言都同样,咱们须要铭记只要涉及到浮点数运算,那么结果就是一个不靠谱的值。
web
NaN是JS的一个特殊值,全称为Not a Number。在咱们进行一些错误的运算时例如:1-'a'
就会返回NaN这样一个结果。typeof
运算符则会返回一个值的数据类型。那么Not a Number的数据类型是什么呢?
面试
JavaScript中数字会以64位浮点数形式进行存储,其中第1位是符号位,0表明正数,1表明负数。这其实会形成一个问题,那就是任何一个数字都会有一个正值和一个负值,固然也包括了0。JS内部中实际上存在着2个0,一个是+0
一个是-0
,好在它们是等价的即:
编程
0*Infinity
,大部分人想到的答案是0,但实际上结果应该是NaN。首先
0*Infinity
是没法直接进行计算的,由于这两个数在数学中表明的概念一个是无穷小,一个是无穷大,二者相乘获得的结果必定是NaN。若是你仍是不理解,能够这样想:
0*Infinity -> (1-1)*Infinity
(1-1)*Infinity -> Infinity-Infinity
复制代码
一个无穷大的数减去一个无穷大的数天然是得不到结果的。0/Infinity
思考方法大致相同:数组
0/Infinity -> 0/Infinity*1
0/Infinity*1 -> 0*(1/Infinity)
0*(1/Infinity) ->0*0
复制代码
0乘以0的结果天然是0。bash
这道题的考点有二:第一,e或E是数值的一种表示方法:科学记数法。12e2表明的含义是12*10^2即1200。第二:parseInt()方法。parseInt是用于将字符串转化为整数的一个方法。当parseInt()内部传入的并不是是一个字符串时,则JS会将内部的非字符串转化为一个字符串再将字符串转换为整数。对于parseInt('12e2')
而言,JS先将一个个字符进行转换,当遇到不能转为数字的字符e就没法进行转换了,因此结果返回为12。而parseInt(12e2)
则不一样,JS首先会将科学记数法表示的12e2解析为1200,而后将1200转化为字符串'1200',结果天然是1200.
编程语言
parseInt(0.0000001)
复制代码
1e-8
而后再将其转化为字符串
'1e-8'
,使用parseInt()方法获得的结果为1。
parseFloat()方法为将一个字符串转换为浮点数。其实,不管是parseFloat('')
仍是parseFloat(null)
,亦或是parseInt('')
,parseInt(null)
返回的结果都是NaN。别问,问就是研究过。ide
这道题有必定概率会出如今面试当中。其实,undefined和null几乎是没有什么区别的,甚至使用JS中的相等运算符比对两者返回的结果都是true.
学习
typeof(null)
返回的结果为object的缘由,固然这是一个BUG,由于null也是一种数据类型呀...
看过第六题后,这道题就很容易了。Number(undefined)
返回值为NaN,Number(null)
返回值为0。因此isNaN(undefined)
返回结果为true,isNaN(null)
返回结果为false。
isFinite()方法返回一个布尔值,表示某个值是否为正常的数值。它是一个和isNaN()对立的方法,后者表示的是是否为一个非数值。因此isFinite(undefined)
返回的结果为false,isFinite(null)
返回的结果为true。可是须要注意的是isFinite(Infinity)
与isFinite(-Infinity)
返回的值为false, isNaN(Infinity)
与isNaN(-Infinity)
返回的结果也是false。为何?别问为何,问就是研究过。
这道题其实根前面的var s = 'hello';
毛关系都没有。字符串其实能够被看做为字符数组,就是这道题想要表达的含义
上一题说过,字符串其实能够被看作字符数组,可是字符串终究是字符串,咱们没法改变字符串中的单个字符。
这道题涉及到了JS编码的问题,JavaScript使用了Unicode字符集,但并不是是UTF-8编码,而是UCS-2。 为何呢?由于那时候,UTF-8尚未被发明出来。因此ES5出现了一个BUG,那就是没法表示'\uFFFF'以后的字符,即一旦字符长度超过两个字节,ES5以前包括ES5都会认为长度超过了一个字符的长度。虽然'\u1D306'仅仅表明一个字符'𝌆',可是仍是'𝌆'.length的结果仍是返回为两个字符的长度即2。
Base64 是一种编码方法,能够将任意值转成 0~九、A~Z、a-z、+和/这64个字符组成的可打印字符。使用它的主要目的,不是为了加密,而是为了避免出现特殊字符,简化程序的处理。原生JS提供两个Base64相关的方法即:
结果是:1。由于变量a,b都指向了同一个对象。
答案是会报错:Unexpected identifier。由于person的key只有'name',要想获取key对应的value可使用person['name']
或person.name
其中 person.name
就至关于person['name']
。如示例:
var person = {name:'DobbyKim'}
for(var key in person){
console.log(person.key);
}
复制代码
上面的代码运行后也会报相同的错误,由于person.key
就至关于person['key']
,而person对象在声明中是没有这样的一个key的。
返回的结果为: