本期就是简述下关于ES5的数据类型。
首先说es5的数据类型,es5呢就是现阶段活跃在各大浏览器上的js的标准。ES是javascript的标准,而各大浏览器上的js呢是实现,只不过是各个浏览器的厂商对这个实现的不同而已,也造就了浏览器兼容性的问题。
好了话题扯回来先,ES5的数据类型分为简单数据类型和复杂的数据类型,简单的数据类型分为undefined,null,boolean,number,string。其中比较特殊的是undefined 与 null,已声明未初始化的变量默认为undefined类型,而null更像一个指针,typeof会显示为object类型。
boolean表现的是真和假,true或者false,对于其他类型的转换是任何非空字符串可以转化为true;任何非0和NaN的数字转化为true;任何对象都是true;值得一说的是null转化为false,而undefined不等价于true也不等价于false,但是!undefined却等价于true。
数字类型number,具体细分的话还分为整数和浮点数,计算机中数字有一个具体的范围,超过这个最大范围会被解析为Infinity,小于这个最小范围被解析为-Infinity,至于这个具体的范围 5e-325 ~1.7976931348623157e+308(具体没有去看工具书什么的验证),而数字类型中最特殊的是NaN,NaN是啥呢,NaN就是一个自己都不等于自己的货,具体什么会被转化为NaN呢,转化为数字类型的undefined,不包含整数,浮点数,其他进制的数的非空字符串转化为数字时会变成NaN,至于对象呢就是用valueOf和toString方法转化成字符串在转换,说白了就是尽量转化成数字而非NaN,毕竟这是个自己跟自己对着干的主。
String就是字符串,这个简单易懂,但是它呢包含这一些转义字符,这就尴尬了,你在处理的时候就必须得考虑到转义字符的问题,n(换行符),t(制表符),b(空格符),r(回车符),f(进纸符),\\(斜杠),\'(单引号),\"(双引号),xnn(16进制表示的一个字符),unnn(16进制表示的一个unicode符);字符串的转换,其实就在于toString,具体的可以添加参数,转变成不同进制,当然还有一些强制类型转换上存在的不同。
最后说到复杂的数据类型,object,可以说是一组属性与方法的集合,它可以是数组,json,还可以是function,关于属性和方法的扯淡呢,可以扯到原形链,这个要扯很多,暂时先不说,单说对象(主要是不想码太多字);对象是对一个内存地址的占用,凡是以对象赋值的变量都是对对象的地址的引用,只有以同一个对象赋值的两个变量才相等,否则它就是两个不同内存地址的引用,根本不存在可比性。至于对象中的值的引用,不同的对象有不同的方法,下标或者其他。