在此记录下学习JavaScript中数据类型的笔记。
一、特殊情况
1、null 与 undefined, JS由于设计问题,有两个表示为空的,一个是null, 一个是undefined, 一般var = a,会被变量提升到作用域顶部,变量没有赋值时是undefined,书写习惯常用undefined表示不想现在赋值的非对象;null 则表示不存在,其实两者意义差不多,其if返回值都是false, 书写习惯常用null表示不想赋值的对象Object。另外两者在转换为数值时返回值不同,前者返回NaN, 后者返回0
+ undefined
NaN
+ null
0
2、typeof可用于判断数据类型,但typeof null 返回值为"object",是由于设计之初模仿Java。
3、 JavaScript共有7种数据类型,number, string, boolean, symbol, null, undefined, object, 其中数组与函数均属于对象。object转为布尔值均为true, 即[],{}if的返回值为true, 返回值为false的只有undefined, null, 0, NaN, ''这五种,除此之外If返回值均为true
!![]
true
!!{}
true
4、对象就是一组"key-value"集合,是一种无序复合数据集合,为复杂数据类型,其中Key为字符串,value可为任何值包括对象。
5、对象的赋值默认是copy其地址,即引用原对象内存地址,函数传递通常也是传递的引用,若要拷贝原值,可以用Object.assign
或_.cloneDeep(obj)
6、给属性赋值时会JavaScript先将键名隐式转换成字符串,故传入对象其将会被转为object Object
7、NaN == NaN为false,NaN属于number类型
8、JS不能正确表示UxFFFF以上的字符,对整数及浮点数的表示均用64位二进制数表示即双精度浮点数。具体浮点运算问题可参考,字符用16位二进制表示。
9、delete返回为true并不表示该值存在且被删除完。
10、In 不能识别哪些属性是对象自身,哪些是继承的
11、八进制以0xx开头,需要额外注意
12、Base64是一种基于64个可打印字符来表示二进制数据的表示方法。可将任意值转成 0~9、A~Z、a-z、+和/这64个字符组成的可打印字符,btoa():任意值转为 Base64 编码,atob():Base64 编码转为原来的值,要将非 ASCII 码字符转为 Base64 编码,必须中间插入一个转码环节(encodeURIComponent,decodeURIComponent),再使用这两个方法。