变量:var、let、const
数据类型:
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。
引用数据类型(对象类型):对象(Object)、数组(Array)、函数(Function),还有两个特殊的对象:正则(RegExp)和日期(Date)。
可以看出虽然JS有多种数据类型,但是不同于Java、C/C++,JavaScript,并不是一种强类型的语言,而是弱类型的语言,也可以算是JS的一个特点,与之对应的是关于另一种描述:动态类型(变量的类型会随着赋值不同类型的数据而改变);
这一特性对于前端来说算是一把双刃剑:一方面定义的变量的时候不用过多的考虑其类型,效率因此得到提升,另一方面由于没有类型的约束,从而会引发项目莫名的崩溃,造成不稳定性,对后期维护或者二次开发来说都是不小的挑战。
有问题自然有解决问题,TypeScript由此应运而生,带着并且以肉眼可见的速度席卷而来,受到广大前端开发者的青睐,赫然成为前端开发的必备技能,可以对变量的类型进行约束,从而将一些潜在的风险扼杀再摇篮里。
更多思考:
参考及相关:
算数运算符:+、- 、* 、\ 、% 、++ 、--
赋值运算符:=、+=、-=、*=、/=、%=
比较运算符:==、===、!=、>、<、>=、<=
逻辑运算符:&&(l逻辑与)、||(逻辑或)、!(逻辑非)
位运算符:&、|、~、^、<<、>>
其他:
数值类型 | 转换成布尔值 |
undefined | false |
null | false |
布尔值 | true是true、false是false |
数 | +0、-0和NaN都为false,其他都为true |
字符串 | 如果字符串是空的(长度是0)为false、其他(长度大于等于1)都为true |
对象 | true |
注意:对象始终为true
== 和 === 的区别:
前者会进行类型转换(隐式转换),然后对值进行比较;
后者则不进行类型转换,类型相同进行值的比较,类型不同直接返回false
== 运算符比较是不同类型的如何比较
类型(a) | 类型(b) | 结果 |
null | undeifned | true |
undefined | null | true |
数 | 字符串 | a == toNumber(b) |
字符串 | 数 | toNumber(a) == b |
布尔值 | 任何类型 | toNumber(a) == b |
任何类型 | 布尔值 | a == toNumber(b) |
字符串或数 | 对象 | a == toPrimitive(b) |
对象 | 字符串或数 | toPrimitive(a) == b |
类型相同时,JS使用equals方法比较两个值或对象,类型不同时用用到的两个方法toNumber和toPrimitive为内置方法
参考及相关: