基本数据类型(存储于栈内存):
number ,string,boolean,null,undefined,
number:包括整数,浮点数,科学计数,进制
string:包括"",’’,``
null:只有null
undefined:只有undefined
引用数据类型(存储于堆内存)…考点:深浅复制:
Array,function,object…
var arr = []
var fn = function(arg1,arg2){} fn(arg1,arg2)
function fn(arg1,arg2){} fn(arg1,arg2)
引用图:
typeof 操作结果可能是 number,string,Boolean,function,object,undefined
typeof 操作结果的类型一定是string
typeof 操作引用类型的值要么是 function 要么是object
null 和 undefined 的区别:
null代表一个空值,而undefined表示变量未赋值
null只有在自己手动赋值的情况下才会出现 而undefined只要未赋值就会出现
类型不同: typeof null结果是object typeof undefined为undefined
undefined派生自null 因此 null == undefined 结果为true 但===时失效
数据在Boolean中的状态
Boolean值 true false
number 非0 0和NaN
string 非空 空字符串
object 任何引用类型 null
undefined undefined
关于number类型的小数精度问题
小数位数大于17位时 会经常出现精度失真
console.log(0.1+0.2) //“0.30000000000000004”
处理失真的几种方式:
1,将小数放大为整数进行运算
console.log(((0.110)+(0.210))/10)
2,保留小数位数的方式
console.log((0.1+0.2).toFixed(2)) //保留两位小数
3,取整,只保留整数位
console.log(Math.floor(0.1+0.2)) //向下取整
console.log(Math.ceil(0.1+0.2)) //向上取整
console.log(Math.round(0.1+0.2)) //四舍五入
面试真题:
console.log(100/0) //infinity
console.log(isFinite(Infinity)) //false
console.log(typeof 5/0) //NaN typeof 优先级高于除法
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 9/0)) //string
console.log(isNaN(NaN)) //true
字符串转化为整数规则
console.log(Number(‘123’)) //123
console.log(Number(‘1.2.3’)) // NaN 存在两个小数点则无法转换
console.log(Number(’ 123 '))//123
console.log(Number(‘1 23’))//NaN 字符串在转化为数字时 前后空格可以忽略,但中间不能忽略
console.log(Number(‘12a3’)) //NaN 字符串转数字 字符串中只能存在数字有关的字符
当引用类型转为数字时 优先调用 valueOf()方法 再toString()方法
var arr = [11] ,[11,22]
拆分步骤:
console.log(arr.valueOf()) //[11],[11,22]
console.log(arr.toString()) //'11','11,22'
console.log(Number(arr)) // 11 , NaN
数字类型 NaN的用法及其说明
console.log(NaN == NaN) // false NaN与任何值都不相等 与自己都不相等
NaN参与的任何运算 其结果都为NaN
console.log('number'/100) //NaN 先转化为number类型
console.log(isNaN('dhfef')) //true 同理 先转化为number类型
console.log(isNaN('')) //false
var arr = []
console.log(isNaN(arr)) //false
parseInt 和 parseFloat
一:parseInt() //从前往后取数字 遇到非数字则停止读取
var str = '12s4';
console.log(Number(str)) //NaN
console.log(parseInt(str)) //12
console.log(parseInt('')) //NaN
console.log(parseInt(null)) //NaN
console.log(parseInt('12.56')) //12
parseFloat():从前往后取符合小鼠数字的字符,只支持10进制,支持科学记数法
console.log(parseFloat('12.56a32')) //12.56
console.log(parseFloat('12.a56a32')) //12
console.log(parseFloat('3.12e10')) //31200000000
parseInt()支持传递两个参数 支持2/8/10/16 0和不写默认为10进制
console.log(parseFloat('070')) //70
console.log(parseFloat('070',16)) //112
console.log(parseFloat('070' ,2)) //0
console.log(parseFloat('070',8)) // 56