一.数据类型:
1.原始类型:数字,字符串,布尔,null,undefined;存储于栈内存空间
2.引用类型:数组(数组中的元素可以是任意数据类型),函数,对象…存储于堆内存空间
二.typeof
1.typeof 操作原始类型的结果可能是number/string/boolean/undefined/object/function;
var a = 100;console.log(typeof a);
结果是number;
var st = "100";console.log(typeof st);
结果是string;
var un;console.log(typeof un);
结果是undefined;
特殊:var nu = null;console.log(typeof nu);
结果是object;
2.typeof 操作引用类型,结果要么是object要么是function;
var arr = [1,2,3]; console.log(typeof arr);
结果是object;
var obj = {}; console.log(typeof obj);
结果是object;
var fun= function(){}; console.log(typeof fun);
结果是function;
3.typeof 操作结果的类型一定是字符串类型string;
var a = 100;console.log(typeof typeof a);
结果是string;
三.undefined 和 null区别
1.概念:null是空值,undefined代表没有值;
2.出现情况:给变量赋值null时,结果为null;变量没有赋值时,结果就是undefined;当函数没有return返回值时,调用函数的表达式就是undefined;
3.特点:typeof操作时 null结果为object; undefined结果为undefined;
4.一起出现的情况:undefined 和null相等判断时结果为true,全等判断结果为false;
四.Boolean类型
1.
五.Number类型
1.包含整数/小数,支持8进制/16进制和科学计数
console.log( 0x1a ); //26
console.log( 0100 ); //64
console.log(3e4); //300000
.
2.number会出现小数精度问题
console.log(0.1+0.2); //0.3000000000004
3.解决小数精度问题
(1)将小数转换成整数做运算;
console.log((0.1*10+0.2*10)/10); //0.3
(2)将小数保留固定的小数位;
//toFixed(n);保留n位小数
console.log((0.1+0.2).toFixed(2));//0.30
(3)只保留整数
//1. Math.floor()向下取整
console.log(Math.floor(0.1+0.2));//0
console.log(Math.floor(1.1+0.2));//1
//2. Math.ceil()向上取整
console.log(Math.ceil(0.1+0.2));//1
//3. Math.round()四舍五入
console.log(Math.round(0.1+0.2));//0
console.log(Math.round(0.4+0.2));//1
4.(1)Number()函数转换
console.log(Number(false)); //true--1 false--0
console.log(Number(null)); //0
console.log(Number(NaN)); //NaN
console.log(Number(undefined)); //NaN
(2)字符串转换成数字,字符串里只能出现数字;
console.log(Number("12.54124")); //12.54124
console.log(Number("12.5a24")); //NaN
(3)引用类型转换成数字时,优先调用valueOf(),再调用toString()将其转换成字符串形式
var arr = [10];
console.log(Number(arr)); //10
//优先调用valueOf()
console.log(arr.valueOf()); //[10]
//再调用toString()将其转换成字符串形式"10"
console.log(arr.toString()); //10
//最后Number(arr)将其转换成数字10
var arr = [10,20];
console.log(Number(arr)); //NaN
console.log(arr.valueOf()); //[10,20]
//再调用toString()将其转换成字符串
console.log(arr.toString()); //10,20
(4)字符串在转化成数字时前后空客可以忽略,不能忽略中间空格;
console.log(Number(" 10 2 ")); //NaN
(5)Infinity(无穷大)和 isFinite(是否有限大)
console.log( Number.MAX_VALUE*100 ); //Infinity
console.log( 100/0 );//Infinity
console.log( Infinity );//无穷大
console.log( isFinite(Infinity) ); //isFinite 是否有限大; 结果为false
console.log(0/0); //NaN
console.log(typeof 1/0); // NaN
// typeof优先级高于乘除,所以先进行typeof 1操作,结果为number,然后number/0结果为NaN;
面试题:
console.log( typeof typeof 5/0); //NaN
console.log( typeof(7/0) ); //number
console.log( typeof(typeof 9/0) ); //number
console.log( typeof typeof(typeof 4/0)); //string
console.log( isNaN(NaN) ); //true
5.NaN与isNaN
(1)NaN与任何值都不相等,包括自己也不相等;
console.log(NaN==NaN); //false
(2)NaN参与的任何运算都是NaN
console.log(NaN/100); //NaN
console.log("number"/100); //NaN
(3)isNaN() 数值检测,用于判断是否不是一个数字;
任何一个不能被转换为数值的值都会导致这个函数返回true;
console.log(isNaN("safsf")); //true
console.log(isNaN("")); //false
//先进行隐式判断Number("")结果为0,再进行isNaN("");所以最后结果为false;
var arr = [];
console.log(isNaN(arr)); //false
6.(1)parseInt:从前到后取数字,直到遇到非数字字符则停止读取;
console.log(parseInt("12.41")); //12
console.log(parseInt(null)); //Nan
console.log(parseInt("")); //Nan
parseInt()支持传递两个参数,支持2/8/16/10进制,第二个参数不传或为假值时,默认按10进制处理
console.log( parseInt("070") );//70
console.log( parseInt("070",16) );//112
console.log( parseInt("070",0) );//70
(2) parseFloat():从前到后取符合小数数字的字符,只支持十进制和科学计数法;
console.log(parseFloat("10.5621")); //10.5621
console.log(parseFloat("10.5ab21")); //10.5
六. typeof优先级高于乘除