有哪些类型
基本类型:String、number、null,undefined、Boolean、es6:symbol、es7:bigint
引用类型:object(array、funciton)
数据类型判断:
typeof:判断除null以外的基本类型
console.log(typeof null)//object
console.log(typeof Boolean)//function
console.log(typeof console);//Object
console.log(typeof 'string')//String
console.log(typeof undefined)//undefined
console.log(typeof Symbol());//symbol
instanceof:判断引用类型,不能判断基本类型
instanceof 是基于原型链来判断对象类型的,a instanceof b指的是,a在b的原型链上面。
比如:
[]instanceof Object//true
[]instanceof Array//true
Object.prototype.toString.call:判断所有变量
let p = {}
console.log(p.toString())//Object
var n= 1
console.log(Object.prototype.toString.call(n))//Number
类型转换
JavaScript是一种弱类型,或者说是一种动态语言。这意味着你不用提前声明变量的数据类型,在程序运行过程中,变量的数据类型会被自动确定。这也意味着你可以使用同一个变量保存不同类型的数据。
显示类型转换
通过 JS 提供的一些函数或运算符,可以直接将类型进行转换。
- String() 将值转换为字符串基本类型
- Number()将值转换为数字基本类型
- Boolean()将值转换为布尔基本类型
- parseInt() 将值转换为数字基本类型
隐式类型转换
1、使用==对左右进行判断时,0、空串、空数组都会转成false。
undefined==null//true
除此之外,它们俩与任何其他类型比较都为false。
2、算术运算符+,其它类型的值与字符串相加会进行拼串。
3、除了+以外的算术运算符,不管是进行运算的是什么类型的值,都会转换成Number类型。
进行非拼串以外的算术运算时:
- true转换成1
- false转换成0
- null转换成0
- undefined转换成NaN
- 空对象转换成NaN
- 空串转换成0
- 空数组转换成0
- 数字字符串进行运算时,会转换成相应的数字(除了+法运算)
变量问题
js里声明变量的方式有var、let、const。
其中。let和const是es6提出的。
- var声明的变量在方法内部是局部变量,外部是全局变量
没有用var声明的变量,在方法内部或者外部都是全局变量 - 在function内部var声明的变量,是局部变量,不声明就是全局变量
- var没有块级作用域
- let、const 声明的全局变量,不会被绑定到 window 上。
- var声明的全局变量会被绑定到window上。
- var 声明的变量存在变量提升的现象:js引擎在渲染的时候会把变量声明和函数声明部分提升到函数顶部(不在函数内部则提升到全局作用域顶部,函数提升优先级大于变量提升,同名函数提升会覆盖变量提升)。
- let和const声明的变量是块级作用域变量(暂时性死区),不会有声明提升。
- var声明的变量可以被覆盖。