原始类型
number string boolean null undefined symbol (ES6新增)
null == undefined //ture`
NaN表示不是数字的值
原始类型的特点
- 值是不可变的 ,不能为原始类型直接添加属性或者方法
- 原始类型的变量之间的比较是值之间的比较
console.log(true == 1); //true
先把true转化为number 1
- 变量名和变量值都存储在栈内存中,变量之间简单赋值时,比如a = 1,现在要把a的值赋予b,就是在栈中开辟新内存,存入b ,a的值1;此后b的值改变不会影响a,因为栈内存中直接存储的是数据。
引用类型
object
- 值是可变的,可以为引用类型添加属性和方法。
- 引用类型之间的比较是引用的比较
- 引用类型的值存放在堆内存中,栈内存中保存的是引用对象名和对应的堆内存地址,所以引用对象之间的比较是引用的比较;对象之间简单赋值时,赋予的是数据在堆内存中的地址,所以两者之间无论谁的值发生改变,都会影响到对方
JavaScript中用于确定基本类型的三种方式
typeof运算符
console.log(typeof 8); //number
console.log(typeof "88"); //string
console.log(typeof false); //boolean
console.log(typeof ff); //function
console.log(typeof undefined); //undefined
console.log(typeof null); //object
console.log(typeof a); //object
typeof null的值是object
instanceof运算符
instanceof运算符后面的数据类型一定是对象
alert(c instanceof Array) ---------------> true
alert(d instanceof Date)
alert(f instanceof Function) ------------> true
alert(f instanceof function) ------------> false
object.prototype.toString.call()方法
alert(Object.prototype.toString.call(a) === ‘[object String]’) -------> true;
alert(Object.prototype.toString.call(b) === ‘[object Number]’) -------> true;
alert(Object.prototype.toString.call(c) === ‘[object Array]’) -------> true;
alert(Object.prototype.toString.call(d) === ‘[object Date]’) -------> true;
alert(Object.prototype.toString.call(e) === ‘[object Function]’) -------> true;
alert(Object.prototype.toString.call(f) === ‘[object Function]’) -------> true;
constructor
在继承时会报错 原型相关
数值转换
Number()
用于任何数据类型
Number转换规则
- 布尔值 true 1,false 0
- null 0
- undefined NaN
- 字符串:包含数值的字符都会转换为一个十进制数值,最前面的0自动忽略;浮点数值转换为相应的浮点数值;空字符串返回0;字符串包含初上情况之外的其他字符返回NaN
- 对象:调用valueOf()方法,按照以上规则返回,如果转换结果NaN,调用toString()方法,再按照转换字符串的规则转换
console.log(Number('1hello'));//NaN
console.log(Number('009.9'));//9.9
console.log(Number(''));//0
parseInt() parseFloat()
专门用于将字符串转换成数值
优先使用parseInt()方法
parseInt()接收第二个参数用于指定进制数
parseFloat()函数的工作方式跟parseInt相似,只解析十进制数字,不能指定底数
console.log(parseInt('12hello'));//12
console.log(parseInt(''));//NaN
console.log(parseInt('2.8'));//2
console.log(parseInt(0xa));//10
// parseInt()接收第二个参数用于指定进制数,也可以省略
console.log(parseInt('10',2));//2 按照2进制处理
// parseFloat()函数的工作方式跟parseInt相似,
// 只解析十进制数字,不能指定底数
console.log(parseFloat('22.34.3'));//22.34
console.log(parseFloat('0xA'));
转换为字符串
每个值都有的toString()方法
null和undefined没有此方法,不必传参,但是转换数值类型时,传入的参数是输出数值的基数
console.log(num2.toString(8));//'14'
String()函数
规则
- 如果数值有toString()方法,调用该方法返回结果
- 如果值为null或者undefiend 返回 ‘null’ ,‘undefiend’
isFinite()
isFinite()返回一个布尔值,表示某个值是否为正常的数值
isFinite(Infinity) //false
isFinite(-Infinity) // false
isFinite(NaN) // false
isFinite(undefined) // false
isFinite(null) // true
isFinite(-1) // true