基本数据类型 String、Number、Bool、undefined和null
引用数据类型 Object(Array,Function,RegExp等)
typeof 123 //number
typeof 'abc' //string
typeof true //boolean
typeof undefined //bndefined
typeof null //object
typeof { } //object
typeof [ ] //object
typeof console.log //function
null类型进行typeof操作符后,结果是object,原因在于,null类型被当做一个空对象引用。
Null类型只有一个值null
Undefined类型只有一个只undefined
数据类型检测
- typeof a 检测基本数据类型:String , Number , Bool, Undefined
注:null的意义是 空对象指针,采用typeof检测会返回 object。
a Instanceof Array 检测引用类型,但是仅能判断是否是对象的实例,并不能准确判断究竟是哪种数据类型。
Object.prototype.toString.call(a) 准备判断传入参数的数据类型
null 与 undefined 的区别
Null:空对象指针,定义一个将来 用于 保存对象 的变量,最好将该变量初始化为 null.
例如 var o = null; 说明o这个变量是要用来保存对象类型的数据的,执行typeof o会返回’object’,那么只要检查null的值就可以判断出该变量是否已经保存了一个对象的引用。在实际开发工作中,经常用到
例如:if ( goods != null ) { // 对goods对象执行相应操作 }
Undefined : 使用var声明一个变量但未初始化其值,该变量的值默认取得undefined,使用typeof检测声明但未初始化的变量,返回undefined
例如 var a; console.log( typeof a ) // undefined
区别和联系:
undefined值派生自null值,因此使用全等操作 undefined == null,返回true;
二者用途不同,不建议将一个变量显式的设置为undefined,比如var a = undefined,声明但未初始化默认会赋值为undefined;但对于null,只要意在保存对象的变量还没有真正保存为对象,就应该明确的让该变量保存为null值,这体现了null作为空对象指针的意义,且利于区分undefined和null。
执行undefined === null 返回false,全等’===’操作符的判断,基于typeof检测到的数据类型,而typeof undefined返回undefined,typeof null返回object。
number 有int+float
1.记住 float 浮点的运算不是精确的
2.number 里面有一个特殊的值 NaN 表示一个不是数字的number类型
eg var m=parseInt("a");
因为NaN表示值不是数字类型 。所以两个 NaN==NaN 的值为false
任何数字和NaN做运算的值都等于NaN, NaN的值不是数字,运算不了。
Numer的小数运算精度问题 参考 https://www.cnblogs.com/ranyonsue/p/11378200.html
eg 0.1+0.2===0.3 false
原因:因为计算值是进行二进制计算 ,通常小数转成2进制形成无限循环的二进制小数,计算机只能根据float 最大精度进去截取,所以算出来是有差别的(无限循环?? 整数部分转二进制 除2 直到商为0逆向取余 小数部分转二进制 乘以2 直到小数位为0 顺向取整)
解决办法:
1 .tofixed()指定精度
2.
var num1 = 0.1;
var num2 = 0.2;
var c=0.1+0.2;//0.30000000000000004
var m = Math.pow(10, 1); //10的1次幂
//原理 ,先转成计算机可以计算的数字,比如整数。在进行元素,之后还原即可
//此例子是先*10 在 除以10
js Number 结果相关的类
Math.abs(-1);//Math 类
window.parseInt("1");
window.parseFloat(0.2222);
//上面两个Numer上 也有这个方法 Number.parseInt
window.isNaN("xxxx");//true 里面 的值会转成数字
Number.IsNaN(Number.NaN);//里面 的值不会进行数字转换 用来修复NaN!=NaN 的问题,判断一个数字是否是NaN值 个人认为
js Nubmer 的一些技巧,提示
1.转成成整数 1111.1111^0 这是一个位运算 具体是去掉小数位 和Math.floor一样的效果 装波利器,我也不知道是在哪里看到 的
其他数据类型是怎么转为number的方法 )
数字类型转换为number返回原值;
布尔类型true转为1,false转为0;
null转为0;undefined转为NaN;
如果只有数值的字符串则返回该数字,空返回0 ,除此之外返回NaN;
对象\数组调用toString()方法后得到的值进行转换;
tip
当 使用+运算的时候。另外一个值是字符串的时候,会把数字转成字符串 进行 字符串相加
1+true; //2
1+"true";//"1true"
1+{a:1};//"1[object Object]"
var a={b:1,toString:function(){return this.b+2}}; 这相当于覆盖了Object对象的toString 的方法
var m=a+2;//5